From 30132403801ac8a6b3e4e8a7dc8879c37a2e7bca Mon Sep 17 00:00:00 2001 From: pstanciu Date: Wed, 18 Sep 2024 05:43:04 +0300 Subject: [PATCH] Backed out 5 changesets (bug 1919090) for causing bc failures on browser_glean_metrics_exist.js CLOSED TREE Backed out changeset 3cd156fb227f (bug 1919090) Backed out changeset 321200cf10d5 (bug 1919090) Backed out changeset 3cdc23af07e3 (bug 1919090) Backed out changeset 5f785a5dd9ee (bug 1919090) Backed out changeset 5072f2f1a075 (bug 1919090) --- .../UserCharacteristicsPageService.sys.mjs | 63 +- .../content/usercharacteristics.js | 106 +-- .../resistfingerprinting/metrics.yaml | 607 +----------------- .../nsUserCharacteristics.cpp | 16 +- 4 files changed, 110 insertions(+), 682 deletions(-) diff --git a/toolkit/components/resistfingerprinting/UserCharacteristicsPageService.sys.mjs b/toolkit/components/resistfingerprinting/UserCharacteristicsPageService.sys.mjs index 282517d6bded..bf2ba2636d69 100644 --- a/toolkit/components/resistfingerprinting/UserCharacteristicsPageService.sys.mjs +++ b/toolkit/components/resistfingerprinting/UserCharacteristicsPageService.sys.mjs @@ -135,7 +135,7 @@ export class UserCharacteristicsPageService { [this.populateDevicePixelRatio, [browser.ownerGlobal]], [this.populateDisabledMediaPrefs, []], [this.populateMathOps, []], - [this.populateMappableData, [data.output]], + [this.populateMapableData, [data.output]], [this.populateGamepads, [data.output.gamepads]], [this.populateClientInfo, []], [this.populateCPUInfo, []], @@ -287,7 +287,7 @@ export class UserCharacteristicsPageService { } } - async populateMappableData(data) { + async populateMapableData(data) { // We set data from usercharacteristics.js // We could do Object.keys(data), but this // is more explicit and provides better @@ -322,24 +322,13 @@ export class UserCharacteristicsPageService { "canvasdata11Webglsoftware", "canvasdata12Fingerprintjs1software", "canvasdata13Fingerprintjs2software", - "voicesCount", - "voicesLocalCount", - "voicesDefault", - "voicesSample", - "voicesSha1", - "voicesAllSsdeep", - "voicesLocalSsdeep", - "voicesNonlocalSsdeep", - "mediaCapabilitiesUnsupported", - "mediaCapabilitiesNotSmooth", - "mediaCapabilitiesNotEfficient", - "mediaCapabilitiesH264", + "voices", + "mediaCapabilities", "audioFingerprint", "jsErrors", "pointerType", "anyPointerType", - "iceSd", - "iceOrder", + "iceFoundations", "motionDecimals", "orientationDecimals", "orientationabsDecimals", @@ -445,12 +434,12 @@ export class UserCharacteristicsPageService { v2: [], extensions: [], }, - shaderPrecision: { + shader_precision: { FRAGMENT_SHADER: {}, VERTEX_SHADER: {}, }, - debugShaders: {}, - debugParams: {}, + debug_shaders: {}, + debug_params: {}, }; const canvas = document.createElement("canvas"); @@ -581,7 +570,7 @@ export class UserCharacteristicsPageService { gl[shaderType], gl[precisionType] ); - results.shaderPrecision[shaderType][precisionType] = { + results.shader_precision[shaderType][precisionType] = { rangeMin, rangeMax, precision, @@ -592,7 +581,7 @@ export class UserCharacteristicsPageService { const mozDebugExt = gl.getExtension("MOZ_debug"); const debugExt = gl.getExtension("WEBGL_debug_renderer_info"); - results.debugParams = { + results.debug_params = { versionRaw: mozDebugExt.getParameter(gl.VERSION), vendorRaw: mozDebugExt.getParameter(gl.VENDOR), rendererRaw: mozDebugExt.getParameter(gl.RENDERER), @@ -655,7 +644,7 @@ export class UserCharacteristicsPageService { return hashHex; } - results.debugShaders = { + results.debug_shaders = { fs: await sha1( translationExt.getTranslatedShaderSource(fragmentShader) ), @@ -664,35 +653,7 @@ export class UserCharacteristicsPageService { }; } - // General - Glean.characteristics.glVersion.set(results.glVersion); - // Debug Params - Glean.characteristics.glExtensions.set(results.debugParams.extensions); - Glean.characteristics.glExtensionsRaw.set( - results.debugParams.extensionsRaw - ); - Glean.characteristics.glRenderer.set(results.debugParams.rendererDebugInfo); - Glean.characteristics.glRendererRaw.set(results.debugParams.rendererRaw); - Glean.characteristics.glVendor.set(results.debugParams.vendorDebugInfo); - Glean.characteristics.glVendorRaw.set(results.debugParams.vendorRaw); - Glean.characteristics.glVersionRaw.set(results.debugParams.versionRaw); - // Debug Shaders - Glean.characteristics.glFragmentShader.set(results.debugShaders.fs); - Glean.characteristics.glVertexShader.set(results.debugShaders.vs); - Glean.characteristics.glMinimalSource.set(results.debugShaders.ms); - // Parameters - Glean.characteristics.glParamsExtensions.set( - JSON.stringify(results.parameters.extensions) - ); - Glean.characteristics.glParamsV1.set(JSON.stringify(results.parameters.v1)); - Glean.characteristics.glParamsV2.set(JSON.stringify(results.parameters.v2)); - // Shader Precision - Glean.characteristics.glPrecisionFragment.set( - JSON.stringify(results.shaderPrecision.FRAGMENT_SHADER) - ); - Glean.characteristics.glPrecisionVertex.set( - JSON.stringify(results.shaderPrecision.VERTEX_SHADER) - ); + Glean.characteristics.webglinfo.set(JSON.stringify(results)); } async pageLoaded(browsingContext, data) { diff --git a/toolkit/components/resistfingerprinting/content/usercharacteristics.js b/toolkit/components/resistfingerprinting/content/usercharacteristics.js index 2f78aa8281b7..5ca870c4bbef 100644 --- a/toolkit/components/resistfingerprinting/content/usercharacteristics.js +++ b/toolkit/components/resistfingerprinting/content/usercharacteristics.js @@ -666,7 +666,7 @@ async function populateVoiceList() { return uri; } - async function processVoices(voices) { + async function stringifyVoices(voices) { voices = voices .map(voice => ({ voiceURI: trimVoiceURI(voice.voiceURI), @@ -688,18 +688,18 @@ async function populateVoiceList() { ); const defaultVoice = voices.find(voice => voice.default); - voices = voices.map(voice => voice.voiceURI).sort(); + voices = voices.map(voice => voice.voiceURI); - return { - voicesCount: voices.length, - voicesLocalCount: localServices.length, - voicesDefault: defaultVoice ? defaultVoice.voiceURI : null, - voicesSample: sample(voices, 5).join(","), - voicesSha1: await sha1(voices.join("|")), - voicesAllSsdeep: ssdeep.digest(voices.join("|")), - voicesLocalSsdeep: ssdeep.digest(localServices.join("|")), - voicesNonlocalSsdeep: ssdeep.digest(nonLocalServices.join("|")), - }; + return JSON.stringify({ + count: voices.length, + localServices: localServices.length, + defaultVoice: defaultVoice ? defaultVoice.voiceURI : null, + samples: sample(voices, 5), + sha1: await sha1(voices.join("|")), + allHash: ssdeep.digest(voices.join("|")), + localHash: ssdeep.digest(localServices.join("|")), + nonLocalHash: ssdeep.digest(nonLocalServices.join("|")), + }); } function fetchVoices() { @@ -722,7 +722,9 @@ async function populateVoiceList() { return Promise.race([promise, timeout]); } - return fetchVoices().then(processVoices); + return { + voices: fetchVoices().then(stringifyVoices), + }; } async function populateMediaCapabilities() { @@ -812,18 +814,11 @@ async function populateMediaCapabilities() { } } - return capabilities; + return JSON.stringify(capabilities); } - const capabilities = await getCapabilities(); - return { - mediaCapabilitiesUnsupported: JSON.stringify(capabilities.unsupported), - mediaCapabilitiesNotSmooth: JSON.stringify(capabilities.notSmooth), - mediaCapabilitiesNotEfficient: JSON.stringify( - capabilities.notPowerEfficient - ), - mediaCapabilitiesH264: JSON.stringify(capabilities.h264), + mediaCapabilities: getCapabilities(), }; } @@ -1017,11 +1012,12 @@ async function populateICEFoundations() { // With no other peers, we wouldn't get prflx candidates. // Relay type of candidates require a turn server. - // srflx candidates require a stun server. - // So, we'll only get host candidates. + // So, we'll only get host and srflx candidates. const result = { - latencies: [], - foundations: [], + hostLatencies: [], + hostFoundations: [], + srflxLatencies: [], + srflxFoundations: [], }; let lastTime; @@ -1032,12 +1028,14 @@ async function populateICEFoundations() { return latency; } - const pc = new RTCPeerConnection(); + const pc = new RTCPeerConnection({ + iceServers: [{ urls: ["stun:stun.l.google.com:19302"] }], + }); pc.onicecandidate = e => { const latency = calculateLatency(); if (e.candidate && e.candidate.candidate !== "") { - result.latencies.push(latency); - result.foundations.push(e.candidate.foundation); + result[e.candidate.type + "Latencies"].push(latency); + result[e.candidate.type + "Foundations"].push(e.candidate.foundation); } }; pc.onicegatheringstatechange = () => { @@ -1060,33 +1058,51 @@ async function populateICEFoundations() { // Run get candidates multiple times to see if foundation order changes // and calculate standard deviation of latencies - const latencies = []; - const foundations = {}; + const allLatencies = { + srflx: [], + host: [], + }; + const allFoundations = { + srflx: {}, + host: {}, + }; for (let i = 0; i < 10; i++) { const result = await getFoundationsAndLatencies(); + const hostFoundations = result.hostFoundations.join(""); + const srflxFoundations = result.srflxFoundations.join(""); - latencies.push(result.latencies); + allLatencies.host.push(result.hostLatencies); + allLatencies.srflx.push(result.srflxLatencies); - const hostFoundations = result.foundations.join(""); if (hostFoundations) { - foundations[hostFoundations] = (foundations[hostFoundations] ?? 0) + 1; + allFoundations.host[hostFoundations] = + (allFoundations.host[hostFoundations] ?? 0) + 1; + } + if (srflxFoundations) { + allFoundations.srflx[srflxFoundations] = + (allFoundations.srflx[srflxFoundations] ?? 0) + 1; } } - const sdLatencies = []; - for (let i = 0; i < (latencies?.[0]?.length ?? 0); i++) { - sdLatencies.push(standardDeviation(latencies.map(a => a[i]))); + const sdLatencies = { + host: [], + srflx: [], + }; + for (let i = 0; i < (allLatencies.host?.[0]?.length ?? 0); i++) { + sdLatencies.host.push(standardDeviation(allLatencies.host.map(a => a[i]))); + } + for (let i = 0; i < (allLatencies.srflx?.[0]?.length ?? 0); i++) { + sdLatencies.srflx.push( + standardDeviation(allLatencies.srflx.map(a => a[i])) + ); } - const sd = - sdLatencies.length > 1 - ? (sdLatencies.reduce((acc, val) => acc + val, 0) / sdLatencies.length) * - 1000 - : 0; - return { - iceSd: sd, - iceOrder: Object.keys(foundations).length, + iceFoundations: JSON.stringify({ + uniqueHostOrder: Object.keys(allFoundations.host).length, + uniqueSrflxOrder: Object.keys(allFoundations.srflx).length, + sdLatencies, + }), }; } diff --git a/toolkit/components/resistfingerprinting/metrics.yaml b/toolkit/components/resistfingerprinting/metrics.yaml index 6d007ed512a2..fab103d02c16 100644 --- a/toolkit/components/resistfingerprinting/metrics.yaml +++ b/toolkit/components/resistfingerprinting/metrics.yaml @@ -1710,289 +1710,19 @@ characteristics: data_sensitivity: - interaction - gl_version: - type: quantity - unit: int - description: > - The version of OpenGL supported by the user's system. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_extensions: + webglinfo: type: text description: > - The list of OpenGL extensions supported by the user's system. + A JSON blob that contains information about the graphics hardware exposed by WebGL. lifetime: application send_in_pings: - user-characteristics notification_emails: - tom@mozilla.com bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1896101 data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_extensions_raw: - type: text - description: > - The raw list of OpenGL extensions supported by the user's system. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_renderer: - type: string - description: > - The OpenGL renderer string. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_renderer_raw: - type: string - description: > - The raw OpenGL renderer string. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_vendor: - type: string - description: > - The OpenGL vendor string. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_vendor_raw: - type: string - description: > - The raw OpenGL vendor string. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_version_raw: - type: string - description: > - The raw OpenGL version string. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_fragment_shader: - type: string - description: > - Hash of the transformed source of the fragment shader. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_vertex_shader: - type: string - description: > - Hash of the transformed source of the vertex shader. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - - technical - - gl_minimal_source: - type: text - description: > - Transformed source of the minimal shader. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_params_extensions: - type: text - description: > - The list of GL parameters of the extensions. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_params_v1: - type: text - description: > - The list of GL parameters of GL1. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_params_v2: - type: text - description: > - The list of GL parameters of GL2. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_precision_fragment: - type: text - description: > - Precisions of the fragment shader. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - gl_precision_vertex: - type: text - description: > - Precisions of the vertex shader. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c5 + - https://bugzilla.mozilla.org/show_bug.cgi?id=xxx expires: never data_sensitivity: # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this @@ -2017,66 +1747,10 @@ characteristics: data_sensitivity: - interaction - voices_count: - type: quantity - unit: int - description: > - Number of speechSynthesis voices available to the user. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - - technical - - voices_local_count: - type: quantity - unit: int - description: > - Number of local speechSynthesis voices available to the user. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - - technical - - voices_default: - type: string - description: > - The default speechSynthesis voice. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - - technical - - voices_sample: + voices: type: text description: > - Names of 5 sample speechSynthesis voices. + Available speechSynthesis voices. lifetime: application send_in_pings: - user-characteristics @@ -2084,89 +1758,15 @@ characteristics: - tom@mozilla.com bugs: - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1886387 data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1886387#c4 expires: never data_sensitivity: # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - highly_sensitive - voices_sha1: - type: text - description: > - SHA1 hash of all the voices. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - voices_all_ssdeep: - type: string - description: > - ssdeep hash of all speechSynthesis voices. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - - technical - - voices_local_ssdeep: - type: string - description: > - ssdeep hash of local speechSynthesis voices. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - - technical - - voices_nonlocal_ssdeep: - type: string - description: > - ssdeep hash of non-local speechSynthesis voices. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c3 - expires: never - data_sensitivity: - - technical - zoom_count: type: quantity unit: int @@ -2407,11 +2007,11 @@ characteristics: data_sensitivity: - technical - camera_count: - type: quantity - unit: int + media_devices: + type: text description: > - Number of cameras available on the device. + A JSON object containing the number of audio input/output, video input and + the number of unique group ids. lifetime: application send_in_pings: - user-characteristics @@ -2419,88 +2019,14 @@ characteristics: - tom@mozilla.com bugs: - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1896736 data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c2 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1896736#c4 expires: never data_sensitivity: - - technical - - microphone_count: - type: quantity - unit: int - description: > - Number of microphones available on the device. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c2 - expires: never - data_sensitivity: - - technical - - speaker_count: - type: quantity - unit: int - description: > - Number of speakers available on the device. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c2 - expires: never - data_sensitivity: - - technical - - group_count: - type: quantity - unit: int - description: > - Number of device groups reported by the device. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c2 - expires: never - data_sensitivity: - - technical - - group_count_wo_speakers: - type: quantity - unit: int - description: > - Number of device groups without speakers reported by the device. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1879151 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c2 - expires: never - data_sensitivity: - - technical + # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this + # is more like 'technical' (per the Data Review), I'm marking highly sensitive. + - highly_sensitive audio_frames: type: quantity @@ -2595,76 +2121,19 @@ characteristics: data_sensitivity: - interaction - media_capabilities_unsupported: + media_capabilities: type: text description: > - Which, if any, media types are not supported. + Which, if any, media types are not supported, and whether they can be run smoothly and power-efficiently. lifetime: application send_in_pings: - user-characteristics notification_emails: - tom@mozilla.com bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1899181 data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c1 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - media_capabilities_not_smooth: - type: text - description: > - Which, if any, media types are not smooth. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c1 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - media_capabilities_not_efficient: - type: text - description: > - Which, if any, media types are not power efficient. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c1 - expires: never - data_sensitivity: - # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this - # is more like 'technical' (per the Data Review), I'm marking highly sensitive. - - highly_sensitive - - media_capabilities_h264: - type: text - description: > - Levels of support for H264 codec. - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c1 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1899181#c3 expires: never data_sensitivity: # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this @@ -2857,41 +2326,25 @@ characteristics: data_sensitivity: - technical - ice_order: - type: quantity - unit: int + ice_foundations: + type: text description: > - Unique ICE foundations occurrence count + Unique ICE foundations occurance count and the + standard deviation of latencies lifetime: application send_in_pings: - user-characteristics notification_emails: - tom@mozilla.com bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1902003 data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c4 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1902003#c2 expires: never data_sensitivity: - - technical - - ice_sd: - type: quantity - unit: int - description: > - ICE foundation discovery latency standard deviation sum multiplied by 1000 - lifetime: application - send_in_pings: - - user-characteristics - notification_emails: - - tom@mozilla.com - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1919090#c4 - expires: never - data_sensitivity: - - technical + # Text metrics are _required_ to be web_activity or highly_sensitive, so even though this + # is more like 'technical' (per the Data Review), I'm marking highly sensitive. + - highly_sensitive pointer_height: type: quantity diff --git a/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp b/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp index 781ce19c1ed4..5c2253c170d8 100644 --- a/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp +++ b/toolkit/components/resistfingerprinting/nsUserCharacteristics.cpp @@ -461,14 +461,12 @@ RefPtr PopulateMediaDevices() { } } - glean::characteristics::camera_count.Set(cameraCount); - glean::characteristics::microphone_count.Set(microphoneCount); - glean::characteristics::speaker_count.Set(speakerCount); - glean::characteristics::group_count.Set( - static_cast(groupIds.size())); - glean::characteristics::group_count_wo_speakers.Set( - static_cast(groupIdsWoSpeakers.size())); - + nsCString json; + json.AppendPrintf( + R"({"cameraCount": %u, "microphoneCount": %u, "speakerCount": %u, "groupCount": %zu, "groupCountWoSpeakers": %zu})", + cameraCount, microphoneCount, speakerCount, groupIds.size(), + groupIdsWoSpeakers.size()); + glean::characteristics::media_devices.Set(json); populatePromise->Resolve(void_t(), __func__); }, [=](RefPtr&& reason) { @@ -667,7 +665,7 @@ const RefPtr& TimoutPromise( // metric is set, this variable should be incremented. It'll be a lot. It's // okay. We're going to need it to know (including during development) what is // the source of the data we are looking at. -const int kSubmissionSchema = 6; +const int kSubmissionSchema = 5; const auto* const kUUIDPref = "toolkit.telemetry.user_characteristics_ping.uuid";