From 3298ef52f19145d76bbaf6fbcc826cc21fd112d4 Mon Sep 17 00:00:00 2001 From: Tim Huang Date: Wed, 12 Mar 2025 07:34:39 +0000 Subject: [PATCH] Bug 1951017 - Dispatch nsRFPService::MaybeReportFontFingerprinter() to the main thread. a=pascalc Original Revision: https://phabricator.services.mozilla.com/D240306 Differential Revision: https://phabricator.services.mozilla.com/D241048 --- .../resistfingerprinting/nsRFPService.cpp | 16 +++++++++++++++- .../resistfingerprinting/nsRFPService.h | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/toolkit/components/resistfingerprinting/nsRFPService.cpp b/toolkit/components/resistfingerprinting/nsRFPService.cpp index 8f05998e684a..6459b7a987f2 100644 --- a/toolkit/components/resistfingerprinting/nsRFPService.cpp +++ b/toolkit/components/resistfingerprinting/nsRFPService.cpp @@ -1823,11 +1823,25 @@ static void MaybeCurrentCaller(nsACString& aFilename, uint32_t& aLineNum, } /* static */ void nsRFPService::MaybeReportFontFingerprinter( - nsIChannel* aChannel, nsACString& aOriginNoSuffix) { + nsIChannel* aChannel, const nsACString& aOriginNoSuffix) { if (!aChannel) { return; } + // The logging of the event will access nsLoadGroup which is main-thread only. + // So we need to dispatch the task to the main thread if we are reporting + // the event off-main-thread. + if (!NS_IsMainThread()) { + NS_DispatchToMainThread(NS_NewRunnableFunction( + "nsRFPService::MaybeReportFontFingerprinter", + [channel = nsCOMPtr{aChannel}, + originNoSuffix = nsCString(aOriginNoSuffix)]() { + nsRFPService::MaybeReportFontFingerprinter(channel, originNoSuffix); + })); + + return; + } + if (MOZ_LOG_TEST(gFingerprinterDetection, LogLevel::Info)) { nsAutoCString filename; uint32_t lineNum = 0; diff --git a/toolkit/components/resistfingerprinting/nsRFPService.h b/toolkit/components/resistfingerprinting/nsRFPService.h index d45f4172c9f3..0ac097b3cc3f 100644 --- a/toolkit/components/resistfingerprinting/nsRFPService.h +++ b/toolkit/components/resistfingerprinting/nsRFPService.h @@ -358,7 +358,7 @@ class nsRFPService final : public nsIObserver, public nsIRFPService { nsACString& aOriginNoSuffix); static void MaybeReportFontFingerprinter(nsIChannel* aChannel, - nsACString& aOriginNoSuffix); + const nsACString& aOriginNoSuffix); // --------------------------------------------------------------------------