mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 05:11:16 +00:00
Bug 1838856 - Add a telemetry for measuring the calculating time of canvas random noises. r=tjr
Differential Revision: https://phabricator.services.mozilla.com/D181574
This commit is contained in:
parent
4a67e420ee
commit
012fc1965d
@ -27,6 +27,7 @@ gecko_metrics = [
|
|||||||
"toolkit/components/extensions/metrics.yaml",
|
"toolkit/components/extensions/metrics.yaml",
|
||||||
"toolkit/components/glean/metrics.yaml",
|
"toolkit/components/glean/metrics.yaml",
|
||||||
"toolkit/components/pdfjs/metrics.yaml",
|
"toolkit/components/pdfjs/metrics.yaml",
|
||||||
|
"toolkit/components/resistfingerprinting/metrics.yaml",
|
||||||
"toolkit/mozapps/extensions/metrics.yaml",
|
"toolkit/mozapps/extensions/metrics.yaml",
|
||||||
"toolkit/components/processtools/metrics.yaml",
|
"toolkit/components/processtools/metrics.yaml",
|
||||||
"toolkit/components/translations/metrics.yaml",
|
"toolkit/components/translations/metrics.yaml",
|
||||||
|
27
toolkit/components/resistfingerprinting/metrics.yaml
Normal file
27
toolkit/components/resistfingerprinting/metrics.yaml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
# Adding a new metric? We have docs for that!
|
||||||
|
# https://firefox-source-docs.mozilla.org/toolkit/components/glean/user/new_definitions_file.html
|
||||||
|
|
||||||
|
$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0
|
||||||
|
$tags:
|
||||||
|
- 'Core :: Privacy: Anti-Tracking'
|
||||||
|
|
||||||
|
fingerprinting.protection:
|
||||||
|
canvas_noise_calculate_time:
|
||||||
|
type: timing_distribution
|
||||||
|
time_unit: millisecond
|
||||||
|
description: >
|
||||||
|
Counts how long to generate canvas random noises.
|
||||||
|
bugs:
|
||||||
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1838856
|
||||||
|
data_reviews:
|
||||||
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1838856#c1
|
||||||
|
notification_emails:
|
||||||
|
- tihuang@mozilla.com
|
||||||
|
- tom@mozilla.com
|
||||||
|
- tschuster@mozilla.com
|
||||||
|
expires: never
|
||||||
|
telemetry_mirror: FINGERPRINTING_PROTECTION_CANVAS_NOISE_CALCULATE_TIME_MS
|
@ -24,6 +24,7 @@
|
|||||||
#include "mozilla/Atomics.h"
|
#include "mozilla/Atomics.h"
|
||||||
#include "mozilla/Casting.h"
|
#include "mozilla/Casting.h"
|
||||||
#include "mozilla/ClearOnShutdown.h"
|
#include "mozilla/ClearOnShutdown.h"
|
||||||
|
#include "mozilla/glean/GleanMetrics.h"
|
||||||
#include "mozilla/HashFunctions.h"
|
#include "mozilla/HashFunctions.h"
|
||||||
#include "mozilla/HelperMacros.h"
|
#include "mozilla/HelperMacros.h"
|
||||||
#include "mozilla/Likely.h"
|
#include "mozilla/Likely.h"
|
||||||
@ -1296,10 +1297,17 @@ nsresult nsRFPService::RandomizePixels(nsICookieJarSettings* aCookieJarSettings,
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto timerId =
|
||||||
|
glean::fingerprinting_protection::canvas_noise_calculate_time.Start();
|
||||||
|
|
||||||
nsTArray<uint8_t> canvasKey;
|
nsTArray<uint8_t> canvasKey;
|
||||||
nsresult rv = GenerateCanvasKeyFromImageData(aCookieJarSettings, aData, aSize,
|
nsresult rv = GenerateCanvasKeyFromImageData(aCookieJarSettings, aData, aSize,
|
||||||
canvasKey);
|
canvasKey);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
if (NS_FAILED(rv)) {
|
||||||
|
glean::fingerprinting_protection::canvas_noise_calculate_time.Cancel(
|
||||||
|
std::move(timerId));
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate the number of pixels based on the given data size. One pixel uses
|
// Calculate the number of pixels based on the given data size. One pixel uses
|
||||||
// 4 bytes that contains ARGB information.
|
// 4 bytes that contains ARGB information.
|
||||||
@ -1352,5 +1360,8 @@ nsresult nsRFPService::RandomizePixels(nsICookieJarSettings* aCookieJarSettings,
|
|||||||
aData[idx] = aData[idx] ^ (bit & 0x1);
|
aData[idx] = aData[idx] ^ (bit & 0x1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glean::fingerprinting_protection::canvas_noise_calculate_time
|
||||||
|
.StopAndAccumulate(std::move(timerId));
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -510,6 +510,10 @@ async function runTest(enabled) {
|
|||||||
|
|
||||||
for (let test of TEST_CASES) {
|
for (let test of TEST_CASES) {
|
||||||
info(`Testing ${test.name}`);
|
info(`Testing ${test.name}`);
|
||||||
|
|
||||||
|
// Clear telemetry before starting test.
|
||||||
|
Services.fog.testResetFOG();
|
||||||
|
|
||||||
let data = await test.extractCanvasData(tab.linkedBrowser);
|
let data = await test.extractCanvasData(tab.linkedBrowser);
|
||||||
let result = test.isDataRandomized(data[0], test.originalData);
|
let result = test.isDataRandomized(data[0], test.originalData);
|
||||||
|
|
||||||
@ -549,6 +553,17 @@ async function runTest(enabled) {
|
|||||||
enabled ? "different" : "the same"
|
enabled ? "different" : "the same"
|
||||||
}.`
|
}.`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Verify the telemetry is recorded if canvas randomization is enabled.
|
||||||
|
if (enabled) {
|
||||||
|
await Services.fog.testFlushAllChildren();
|
||||||
|
|
||||||
|
ok(
|
||||||
|
Glean.fingerprintingProtection.canvasNoiseCalculateTime.testGetValue()
|
||||||
|
.sum > 0,
|
||||||
|
"The telemetry of canvas randomization is recorded."
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BrowserTestUtils.removeTab(tab);
|
BrowserTestUtils.removeTab(tab);
|
||||||
|
@ -235,6 +235,10 @@ async function runTest(enabled) {
|
|||||||
|
|
||||||
for (let test of TEST_CASES) {
|
for (let test of TEST_CASES) {
|
||||||
info(`Testing ${test.name} in the worker`);
|
info(`Testing ${test.name} in the worker`);
|
||||||
|
|
||||||
|
// Clear telemetry before starting test.
|
||||||
|
Services.fog.testResetFOG();
|
||||||
|
|
||||||
let data = await await runFunctionInWorker(
|
let data = await await runFunctionInWorker(
|
||||||
tab.linkedBrowser,
|
tab.linkedBrowser,
|
||||||
test.extractCanvasData
|
test.extractCanvasData
|
||||||
@ -282,6 +286,17 @@ async function runTest(enabled) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verify the telemetry is recorded if canvas randomization is enabled.
|
||||||
|
if (enabled) {
|
||||||
|
await Services.fog.testFlushAllChildren();
|
||||||
|
|
||||||
|
ok(
|
||||||
|
Glean.fingerprintingProtection.canvasNoiseCalculateTime.testGetValue()
|
||||||
|
.sum > 0,
|
||||||
|
"The telemetry of canvas randomization is recorded."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
BrowserTestUtils.removeTab(tab);
|
BrowserTestUtils.removeTab(tab);
|
||||||
BrowserTestUtils.removeTab(privateTab);
|
BrowserTestUtils.removeTab(privateTab);
|
||||||
await BrowserTestUtils.closeWindow(privateWindow);
|
await BrowserTestUtils.closeWindow(privateWindow);
|
||||||
|
@ -663,6 +663,21 @@
|
|||||||
"releaseChannelCollection": "opt-out",
|
"releaseChannelCollection": "opt-out",
|
||||||
"description": "GPU Device Reset Reason (ok, hung, removed, reset, internal error, invalid call, out of memory)"
|
"description": "GPU Device Reset Reason (ok, hung, removed, reset, internal error, invalid call, out of memory)"
|
||||||
},
|
},
|
||||||
|
"FINGERPRINTING_PROTECTION_CANVAS_NOISE_CALCULATE_TIME_MS": {
|
||||||
|
"record_in_processes": ["content"],
|
||||||
|
"products": ["firefox"],
|
||||||
|
"alert_emails": [
|
||||||
|
"tihuang@mozilla.com",
|
||||||
|
"tom@mozilla.com",
|
||||||
|
"tschuster@mozilla.com"
|
||||||
|
],
|
||||||
|
"expires_in_version": "never",
|
||||||
|
"bug_numbers": [1838856],
|
||||||
|
"kind": "exponential",
|
||||||
|
"high": 600000,
|
||||||
|
"n_buckets": 100,
|
||||||
|
"description": "Counts how long to generate canvas random noises."
|
||||||
|
},
|
||||||
"FORCED_DEVICE_RESET_REASON": {
|
"FORCED_DEVICE_RESET_REASON": {
|
||||||
"record_in_processes": ["main", "content", "gpu"],
|
"record_in_processes": ["main", "content", "gpu"],
|
||||||
"products": ["firefox", "fennec"],
|
"products": ["firefox", "fennec"],
|
||||||
|
Loading…
Reference in New Issue
Block a user