commit 50ae8c38460620f59bc33d4f596dc44af742f6be
parent 58e2f2364a33bd91662856f12dd7a23bed063149
Author: Tom Ritter <tom@mozilla.com>
Date: Fri, 19 Dec 2025 14:47:58 +0000
Bug 2005273: Improve performance of canvas fingerprinting detection r=timhuang
Firstly, remove Variant3 which was way too general and causing detection (and perf loss)
in way too many instances.
Secondly, stick the content blocking action into an async action to be called
out of line from our current action.
Differential Revision: https://phabricator.services.mozilla.com/D276876
Diffstat:
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/toolkit/components/resistfingerprinting/nsRFPService.cpp b/toolkit/components/resistfingerprinting/nsRFPService.cpp
@@ -2494,8 +2494,6 @@ static void MaybeCurrentCaller(nsACString& aFilename, uint32_t& aLineNum,
fingerprinter = CanvasFingerprinterAlias::eVariant1;
} else if (extractedWebGL > 0 && extracted2D > 1 && seenExtracted2D_860x6) {
fingerprinter = CanvasFingerprinterAlias::eVariant2;
- } else if (extractedWebGL > 0 || extracted2D > 0) {
- fingerprinter = CanvasFingerprinterAlias::eVariant3;
} else if (extracted2D > 0 &&
(accumulatedFeatureUsage & CanvasFeatureUsage::SetFont) &&
(accumulatedFeatureUsage &
@@ -2531,10 +2529,15 @@ static void MaybeCurrentCaller(nsACString& aFilename, uint32_t& aLineNum,
CanvasFingerprinterToString(fingerprinter),
CanvasUsageSourceToString(accumulatedUsageSource).get()));
- ContentBlockingNotifier::OnEvent(
- aChannel, false,
- nsIWebProgressListener::STATE_ALLOWED_CANVAS_FINGERPRINTING, origin,
- Nothing(), Some(event));
+ NS_DispatchToMainThread(NS_NewRunnableFunction(
+ "nsRFPService::MaybeReportCanvasFingerprinter::NotifyEvent",
+ [channel = nsCOMPtr{aChannel}, origin = nsCString(aOriginNoSuffix),
+ event = event]() {
+ ContentBlockingNotifier::OnEvent(
+ channel, false,
+ nsIWebProgressListener::STATE_ALLOWED_CANVAS_FINGERPRINTING, origin,
+ Nothing(), Some(event));
+ }));
}
/* static */ void nsRFPService::MaybeReportFontFingerprinter(