diff --git a/build/pgo/certs/cert9.db b/build/pgo/certs/cert9.db index d7c148e98abd..42a71e85a3db 100644 Binary files a/build/pgo/certs/cert9.db and b/build/pgo/certs/cert9.db differ diff --git a/build/pgo/certs/key4.db b/build/pgo/certs/key4.db index 894317a2c008..49652af0f4a4 100644 Binary files a/build/pgo/certs/key4.db and b/build/pgo/certs/key4.db differ diff --git a/build/pgo/certs/mochitest.client b/build/pgo/certs/mochitest.client index ccd2f3749cbf..f2efad0a6ccf 100644 Binary files a/build/pgo/certs/mochitest.client and b/build/pgo/certs/mochitest.client differ diff --git a/build/pgo/server-locations.txt b/build/pgo/server-locations.txt index e9394f552f36..fa1b2c8aac12 100644 --- a/build/pgo/server-locations.txt +++ b/build/pgo/server-locations.txt @@ -204,7 +204,6 @@ http://itisatracker.org:80 http://trackertest.org:80 http://email-tracking.example.org:80 http://consent-manager.example.org:80 -http://anti-fraud.example.org:80 # # Used while testing TLS session ticket resumption for third-party trackers (bug 1500533) @@ -224,7 +223,6 @@ https://social-tracking.example.org:443 https://itisatracker.org:443 https://email-tracking.example.org:443 https://consent-manager.example.org:443 -https://anti-fraud.example.org:443 # # Used while testing flash blocking (Bug 1307604) diff --git a/dom/chrome-webidl/ChannelWrapper.webidl b/dom/chrome-webidl/ChannelWrapper.webidl index 4760aabc9e44..7ae17f17a122 100644 --- a/dom/chrome-webidl/ChannelWrapper.webidl +++ b/dom/chrome-webidl/ChannelWrapper.webidl @@ -45,6 +45,7 @@ enum MozUrlClassificationFlags { "cryptomining_content", "emailtracking", "emailtracking_content", + "consentmanager", "tracking", "tracking_ad", "tracking_analytics", @@ -56,9 +57,7 @@ enum MozUrlClassificationFlags { "socialtracking_twitter", "any_basic_tracking", "any_strict_tracking", - "any_social_tracking", - "consentmanager", - "antifraud" + "any_social_tracking" }; /** diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 3d4e6ce11558..782ecd41080b 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -15778,25 +15778,6 @@ value: true mirror: always -# Annotate channels based on the anti-fraud list -# Note: anti-fraud annotations will be disabled if tracking protection is disabled -- name: privacy.trackingprotection.antifraud.annotate_channels - type: bool - value: true - mirror: always - -# Skip blocking for anti-fraud resources in all modes. -- name: privacy.trackingprotection.antifraud.skip.enabled - type: RelaxedAtomicBool - value: false - mirror: always - -# Skip blocking for anti-fraud resources in Private Browsing mode. -- name: privacy.trackingprotection.antifraud.skip.pbmode.enabled - type: RelaxedAtomicBool - value: true - mirror: always - # Whether to spoof user locale to English (used as part of Resist # Fingerprinting). # 0 - will prompt diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index 3457ec144779..09f94c173918 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -3325,11 +3325,9 @@ pref("urlclassifier.features.emailtracking.datacollection.blocklistTables", "bas pref("urlclassifier.features.emailtracking.datacollection.allowlistTables", "mozstd-trackwhite-digest256"); pref("urlclassifier.features.consentmanager.annotate.blocklistTables", "consent-manager-track-digest256"); pref("urlclassifier.features.consentmanager.annotate.allowlistTables", "mozstd-trackwhite-digest256"); -pref("urlclassifier.features.antifraud.annotate.blocklistTables", "anti-fraud-track-digest256"); -pref("urlclassifier.features.antifraud.annotate.allowlistTables", "mozstd-trackwhite-digest256"); // These tables will never trigger a gethash call. -pref("urlclassifier.disallow_completions", "goog-downloadwhite-digest256,base-track-digest256,mozstd-trackwhite-digest256,content-track-digest256,mozplugin-block-digest256,mozplugin2-block-digest256,ads-track-digest256,social-track-digest256,analytics-track-digest256,base-fingerprinting-track-digest256,content-fingerprinting-track-digest256,base-cryptomining-track-digest256,content-cryptomining-track-digest256,fanboyannoyance-ads-digest256,fanboysocial-ads-digest256,easylist-ads-digest256,easyprivacy-ads-digest256,adguard-ads-digest256,social-tracking-protection-digest256,social-tracking-protection-facebook-digest256,social-tracking-protection-linkedin-digest256,social-tracking-protection-twitter-digest256,base-email-track-digest256,content-email-track-digest256,consent-manager-track-digest256,anti-fraud-track-digest256"); +pref("urlclassifier.disallow_completions", "goog-downloadwhite-digest256,base-track-digest256,mozstd-trackwhite-digest256,content-track-digest256,mozplugin-block-digest256,mozplugin2-block-digest256,ads-track-digest256,social-track-digest256,analytics-track-digest256,base-fingerprinting-track-digest256,content-fingerprinting-track-digest256,base-cryptomining-track-digest256,content-cryptomining-track-digest256,fanboyannoyance-ads-digest256,fanboysocial-ads-digest256,easylist-ads-digest256,easyprivacy-ads-digest256,adguard-ads-digest256,social-tracking-protection-digest256,social-tracking-protection-facebook-digest256,social-tracking-protection-linkedin-digest256,social-tracking-protection-twitter-digest256,base-email-track-digest256,content-email-track-digest256,consent-manager-track-digest256"); // Workaround for Google Recaptcha pref("urlclassifier.trackingAnnotationSkipURLs", ""); @@ -3404,7 +3402,7 @@ pref("browser.safebrowsing.reportPhishURL", "https://%LOCALE%.phish-report.mozil // Mozilla Safe Browsing provider (for tracking protection and plugin blocking) pref("browser.safebrowsing.provider.mozilla.pver", "2.2"); -pref("browser.safebrowsing.provider.mozilla.lists", "base-track-digest256,mozstd-trackwhite-digest256,google-trackwhite-digest256,content-track-digest256,mozplugin-block-digest256,mozplugin2-block-digest256,ads-track-digest256,social-track-digest256,analytics-track-digest256,base-fingerprinting-track-digest256,content-fingerprinting-track-digest256,base-cryptomining-track-digest256,content-cryptomining-track-digest256,fanboyannoyance-ads-digest256,fanboysocial-ads-digest256,easylist-ads-digest256,easyprivacy-ads-digest256,adguard-ads-digest256,social-tracking-protection-digest256,social-tracking-protection-facebook-digest256,social-tracking-protection-linkedin-digest256,social-tracking-protection-twitter-digest256,base-email-track-digest256,content-email-track-digest256,consent-manager-track-digest256,anti-fraud-track-digest256"); +pref("browser.safebrowsing.provider.mozilla.lists", "base-track-digest256,mozstd-trackwhite-digest256,google-trackwhite-digest256,content-track-digest256,mozplugin-block-digest256,mozplugin2-block-digest256,ads-track-digest256,social-track-digest256,analytics-track-digest256,base-fingerprinting-track-digest256,content-fingerprinting-track-digest256,base-cryptomining-track-digest256,content-cryptomining-track-digest256,fanboyannoyance-ads-digest256,fanboysocial-ads-digest256,easylist-ads-digest256,easyprivacy-ads-digest256,adguard-ads-digest256,social-tracking-protection-digest256,social-tracking-protection-facebook-digest256,social-tracking-protection-linkedin-digest256,social-tracking-protection-twitter-digest256,base-email-track-digest256,content-email-track-digest256,consent-manager-track-digest256"); pref("browser.safebrowsing.provider.mozilla.updateURL", "moz-sbrs:://antitracking"); pref("browser.safebrowsing.provider.mozilla.gethashURL", "https://shavar.services.mozilla.com/gethash?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2"); // Set to a date in the past to force immediate download in new profiles. diff --git a/netwerk/base/nsIClassifiedChannel.idl b/netwerk/base/nsIClassifiedChannel.idl index 93a49ab65b06..a90ccf17c16e 100644 --- a/netwerk/base/nsIClassifiedChannel.idl +++ b/netwerk/base/nsIClassifiedChannel.idl @@ -93,14 +93,14 @@ interface nsIClassifiedChannel : nsISupports /** * The resource is on the fingerprinting list. */ - CLASSIFIED_FINGERPRINTING = 0x00000001, - CLASSIFIED_FINGERPRINTING_CONTENT = 0x00000002, + CLASSIFIED_FINGERPRINTING = 0x0001, + CLASSIFIED_FINGERPRINTING_CONTENT = 0x0080, /** * The resource is on the cryptomining list. */ - CLASSIFIED_CRYPTOMINING = 0x00000004, - CLASSIFIED_CRYPTOMINING_CONTENT = 0x00000008, + CLASSIFIED_CRYPTOMINING = 0x0002, + CLASSIFIED_CRYPTOMINING_CONTENT = 0x0100, /** * The following are about tracking annotation and are available only @@ -108,36 +108,30 @@ interface nsIClassifiedChannel : nsISupports * CLASSIFIED_TRACKING is set if we are not able to identify the * type of classification. */ - CLASSIFIED_TRACKING = 0x00000010, - CLASSIFIED_TRACKING_AD = 0x00000020, - CLASSIFIED_TRACKING_ANALYTICS = 0x00000040, - CLASSIFIED_TRACKING_SOCIAL = 0x00000080, - CLASSIFIED_TRACKING_CONTENT = 0x00000100, + CLASSIFIED_TRACKING = 0x0004, + CLASSIFIED_TRACKING_AD = 0x0008, + CLASSIFIED_TRACKING_ANALYTICS = 0x0010, + CLASSIFIED_TRACKING_SOCIAL = 0x0020, + CLASSIFIED_TRACKING_CONTENT = 0x0040, /** * The following are about social tracking. */ - CLASSIFIED_SOCIALTRACKING = 0x00000200, - CLASSIFIED_SOCIALTRACKING_FACEBOOK = 0x00000400, - CLASSIFIED_SOCIALTRACKING_LINKEDIN = 0x00000800, - CLASSIFIED_SOCIALTRACKING_TWITTER = 0x00001000, + CLASSIFIED_SOCIALTRACKING = 0x0200, + CLASSIFIED_SOCIALTRACKING_FACEBOOK = 0x0400, + CLASSIFIED_SOCIALTRACKING_LINKEDIN = 0x0800, + CLASSIFIED_SOCIALTRACKING_TWITTER = 0x1000, /** * The following are about email tracking. */ - CLASSIFIED_EMAILTRACKING = 0x00002000, - CLASSIFIED_EMAILTRACKING_CONTENT = 0x00004000, + CLASSIFIED_EMAILTRACKING = 0x2000, + CLASSIFIED_EMAILTRACKING_CONTENT = 0x4000, /** * The following are about consent managers. */ - CLASSIFIED_CONSENTMANAGER = 0x00008000, - - /** - * The following are about anti fraud. - */ - CLASSIFIED_ANTIFRAUD = 0x00010000, - + CLASSIFIED_CONSENTMANAGER = 0x8000, /** * This is exposed to help to identify tracking classification using the * basic lists. diff --git a/netwerk/url-classifier/UrlClassifierCommon.cpp b/netwerk/url-classifier/UrlClassifierCommon.cpp index 1275d654ed1d..2c9144305267 100644 --- a/netwerk/url-classifier/UrlClassifierCommon.cpp +++ b/netwerk/url-classifier/UrlClassifierCommon.cpp @@ -697,46 +697,26 @@ bool UrlClassifierCommon::ShouldProcessWithProtectionFeature( MOZ_ASSERT(aChannel); bool shouldProcess = true; - bool isPrivateMode = NS_UsePrivateBrowsing(aChannel); + + if (!(StaticPrefs::privacy_trackingprotection_consentmanager_skip_enabled() || + (StaticPrefs:: + privacy_trackingprotection_consentmanager_skip_pbmode_enabled() && + NS_UsePrivateBrowsing(aChannel)))) { + return shouldProcess; + } nsCOMPtr classifiedChannel = do_QueryInterface(aChannel); if (classifiedChannel) { - if (classifiedChannel->GetClassificationFlags() & - nsIClassifiedChannel::ClassificationFlags::CLASSIFIED_CONSENTMANAGER) { - // Channel is classified as consent manager - if (StaticPrefs:: - privacy_trackingprotection_consentmanager_skip_enabled() || - (StaticPrefs:: - privacy_trackingprotection_consentmanager_skip_pbmode_enabled() && - isPrivateMode)) { - // Don't process channel - shouldProcess = false; + shouldProcess = + !(classifiedChannel->GetClassificationFlags() & + nsIClassifiedChannel::ClassificationFlags::CLASSIFIED_CONSENTMANAGER); - UC_LOG( - ("UrlClassifierCommon::ShouldProcessWithProtectionFeature - " - "Skipping channel %p because annotated as a consent manager", - aChannel)); - } - } - - if (classifiedChannel->GetClassificationFlags() & - nsIClassifiedChannel::ClassificationFlags::CLASSIFIED_ANTIFRAUD) { - // Channel is classified as anti-fraud - if (StaticPrefs::privacy_trackingprotection_antifraud_skip_enabled() || - (StaticPrefs:: - privacy_trackingprotection_antifraud_skip_pbmode_enabled() && - isPrivateMode)) { - // Don't process channel - shouldProcess = false; - - UC_LOG( - ("UrlClassifierCommon::ShouldProcessWithProtectionFeature - " - "Skipping channel %p because it is annotated as anti-fraud", - aChannel)); - } - } + UC_LOG( + ("UrlClassifierCommon::ShouldProcessWithProtectionFeature - " + "shouldProcess=%d for channel %p", + shouldProcess, aChannel)); } return shouldProcess; diff --git a/netwerk/url-classifier/UrlClassifierFeatureAntiFraudAnnotation.cpp b/netwerk/url-classifier/UrlClassifierFeatureAntiFraudAnnotation.cpp deleted file mode 100644 index 42d3fbf39507..000000000000 --- a/netwerk/url-classifier/UrlClassifierFeatureAntiFraudAnnotation.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#include "UrlClassifierFeatureAntiFraudAnnotation.h" - -#include "Classifier.h" -#include "mozilla/Logging.h" -#include "mozilla/StaticPrefs_privacy.h" -#include "mozilla/StaticPtr.h" -#include "mozilla/net/UrlClassifierCommon.h" -#include "nsIChannel.h" -#include "nsIClassifiedChannel.h" -#include "nsIWebProgressListener.h" -#include "nsContentUtils.h" - -namespace mozilla { -namespace net { - -namespace { - -#define ANTIFRAUD_ANNOTATION_FEATURE_NAME "antifraud-annotation" - -#define URLCLASSIFIER_ANTIFRAUD_ANNOTATION_BLOCKLIST \ - "urlclassifier.features.antifraud.annotate.blocklistTables" -#define URLCLASSIFIER_ANTIFRAUD_ANNOTATION_BLOCKLIST_TEST_ENTRIES \ - "urlclassifier.features.antifraud.annotate.blocklistHosts" -#define URLCLASSIFIER_ANTIFRAUD_ANNOTATION_ENTITYLIST \ - "urlclassifier.features.antifraud.annotate.allowlistTables" -#define URLCLASSIFIER_ANTIFRAUD_ANNOTATION_ENTITYLIST_TEST_ENTRIES \ - "urlclassifier.features.antifraud.annotate.allowlistHosts" -#define URLCLASSIFIER_ANTIFRAUD_ANNOTATION_EXCEPTION_URLS \ - "urlclassifier.features.antifraud.annotate.skipURLs" -#define TABLE_ANTIFRAUD_ANNOTATION_BLOCKLIST_PREF \ - "antifraud-annotate-blocklist-pref" -#define TABLE_ANTIFRAUD_ANNOTATION_ENTITYLIST_PREF \ - "antifraud-annotate-allowlist-pref" - -static StaticRefPtr - gFeatureAntiFraudAnnotation; - -} // namespace - -UrlClassifierFeatureAntiFraudAnnotation:: - UrlClassifierFeatureAntiFraudAnnotation() - : UrlClassifierFeatureAntiTrackingBase( - nsLiteralCString(ANTIFRAUD_ANNOTATION_FEATURE_NAME), - nsLiteralCString(URLCLASSIFIER_ANTIFRAUD_ANNOTATION_BLOCKLIST), - nsLiteralCString(URLCLASSIFIER_ANTIFRAUD_ANNOTATION_ENTITYLIST), - nsLiteralCString( - URLCLASSIFIER_ANTIFRAUD_ANNOTATION_BLOCKLIST_TEST_ENTRIES), - nsLiteralCString( - URLCLASSIFIER_ANTIFRAUD_ANNOTATION_ENTITYLIST_TEST_ENTRIES), - nsLiteralCString(TABLE_ANTIFRAUD_ANNOTATION_BLOCKLIST_PREF), - nsLiteralCString(TABLE_ANTIFRAUD_ANNOTATION_ENTITYLIST_PREF), - nsLiteralCString(URLCLASSIFIER_ANTIFRAUD_ANNOTATION_EXCEPTION_URLS)) { -} - -/* static */ const char* UrlClassifierFeatureAntiFraudAnnotation::Name() { - return ANTIFRAUD_ANNOTATION_FEATURE_NAME; -} - -/* static */ -void UrlClassifierFeatureAntiFraudAnnotation::MaybeInitialize() { - MOZ_ASSERT(XRE_IsParentProcess()); - UC_LOG_LEAK(("UrlClassifierFeatureAntiFraudAnnotation::MaybeInitialize")); - - if (!gFeatureAntiFraudAnnotation) { - gFeatureAntiFraudAnnotation = new UrlClassifierFeatureAntiFraudAnnotation(); - gFeatureAntiFraudAnnotation->InitializePreferences(); - } -} - -/* static */ -void UrlClassifierFeatureAntiFraudAnnotation::MaybeShutdown() { - UC_LOG_LEAK(("UrlClassifierFeatureAntiFraudAnnotation::MaybeShutdown")); - - if (gFeatureAntiFraudAnnotation) { - gFeatureAntiFraudAnnotation->ShutdownPreferences(); - gFeatureAntiFraudAnnotation = nullptr; - } -} - -/* static */ -already_AddRefed -UrlClassifierFeatureAntiFraudAnnotation::MaybeCreate(nsIChannel* aChannel) { - MOZ_ASSERT(aChannel); - - UC_LOG_LEAK( - ("UrlClassifierFeatureAntiFraudAnnotation::MaybeCreate - channel %p", - aChannel)); - - if (!StaticPrefs::privacy_trackingprotection_antifraud_annotate_channels()) { - return nullptr; - } - - // We also don't need to annotate the channel if we are not blocking - // fingerprinters - if (!StaticPrefs::privacy_trackingprotection_fingerprinting_enabled()) { - return nullptr; - } - - MaybeInitialize(); - MOZ_ASSERT(gFeatureAntiFraudAnnotation); - - RefPtr self = - gFeatureAntiFraudAnnotation; - return self.forget(); -} - -/* static */ -already_AddRefed -UrlClassifierFeatureAntiFraudAnnotation::GetIfNameMatches( - const nsACString& aName) { - if (!aName.EqualsLiteral(ANTIFRAUD_ANNOTATION_FEATURE_NAME)) { - return nullptr; - } - - MaybeInitialize(); - MOZ_ASSERT(gFeatureAntiFraudAnnotation); - - RefPtr self = - gFeatureAntiFraudAnnotation; - return self.forget(); -} - -NS_IMETHODIMP -UrlClassifierFeatureAntiFraudAnnotation::ProcessChannel( - nsIChannel* aChannel, const nsTArray& aList, - const nsTArray& aHashes, bool* aShouldContinue) { - NS_ENSURE_ARG_POINTER(aChannel); - NS_ENSURE_ARG_POINTER(aShouldContinue); - - // This is not a blocking feature. - *aShouldContinue = true; - - UC_LOG( - ("UrlClassifierFeatureAntiFraudAnnotation::ProcessChannel - " - "annotating channel %p", - aChannel)); - - static std::vector - sClassificationData = { - {"consent-manager-track-"_ns, - nsIClassifiedChannel::ClassificationFlags::CLASSIFIED_ANTIFRAUD}, - }; - - uint32_t flags = UrlClassifierCommon::TablesToClassificationFlags( - aList, sClassificationData, - nsIClassifiedChannel::ClassificationFlags::CLASSIFIED_ANTIFRAUD); - - UrlClassifierCommon::SetTrackingInfo(aChannel, aList, aHashes); - - UrlClassifierCommon::AnnotateChannelWithoutNotifying(aChannel, flags); - - return NS_OK; -} - -NS_IMETHODIMP -UrlClassifierFeatureAntiFraudAnnotation::GetURIByListType( - nsIChannel* aChannel, nsIUrlClassifierFeature::listType aListType, - nsIUrlClassifierFeature::URIType* aURIType, nsIURI** aURI) { - NS_ENSURE_ARG_POINTER(aChannel); - NS_ENSURE_ARG_POINTER(aURIType); - NS_ENSURE_ARG_POINTER(aURI); - - if (aListType == nsIUrlClassifierFeature::blocklist) { - *aURIType = nsIUrlClassifierFeature::blocklistURI; - return aChannel->GetURI(aURI); - } - - MOZ_ASSERT(aListType == nsIUrlClassifierFeature::entitylist); - - *aURIType = nsIUrlClassifierFeature::pairwiseEntitylistURI; - return UrlClassifierCommon::CreatePairwiseEntityListURI(aChannel, aURI); -} - -} // namespace net -} // namespace mozilla diff --git a/netwerk/url-classifier/UrlClassifierFeatureAntiFraudAnnotation.h b/netwerk/url-classifier/UrlClassifierFeatureAntiFraudAnnotation.h deleted file mode 100644 index fc35698d41bc..000000000000 --- a/netwerk/url-classifier/UrlClassifierFeatureAntiFraudAnnotation.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef mozilla_net_UrlClassifierFeatureAntiFraudAnnotation_h -#define mozilla_net_UrlClassifierFeatureAntiFraudAnnotation_h - -#include "UrlClassifierFeatureBase.h" - -class nsIChannel; - -namespace mozilla { -namespace net { - -class UrlClassifierFeatureAntiFraudAnnotation final - : public UrlClassifierFeatureAntiTrackingBase { - public: - static const char* Name(); - - static void MaybeShutdown(); - - static already_AddRefed MaybeCreate( - nsIChannel* aChannel); - - static already_AddRefed GetIfNameMatches( - const nsACString& aName); - - NS_IMETHOD ProcessChannel(nsIChannel* aChannel, - const nsTArray& aList, - const nsTArray& aHashes, - bool* aShouldContinue) override; - - NS_IMETHOD GetURIByListType(nsIChannel* aChannel, - nsIUrlClassifierFeature::listType aListType, - nsIUrlClassifierFeature::URIType* aURIType, - nsIURI** aURI) override; - - private: - UrlClassifierFeatureAntiFraudAnnotation(); - - static void MaybeInitialize(); -}; - -} // namespace net -} // namespace mozilla - -#endif // mozilla_net_UrlClassifierFeatureAntiFraudAnnotation_h diff --git a/netwerk/url-classifier/UrlClassifierFeatureFactory.cpp b/netwerk/url-classifier/UrlClassifierFeatureFactory.cpp index 029f532c01e4..b2be55966a0e 100644 --- a/netwerk/url-classifier/UrlClassifierFeatureFactory.cpp +++ b/netwerk/url-classifier/UrlClassifierFeatureFactory.cpp @@ -7,7 +7,6 @@ #include "mozilla/net/UrlClassifierFeatureFactory.h" // List of Features -#include "UrlClassifierFeatureAntiFraudAnnotation.h" #include "UrlClassifierFeatureCryptominingAnnotation.h" #include "UrlClassifierFeatureCryptominingProtection.h" #include "UrlClassifierFeatureConsentManagerAnnotation.h" @@ -38,7 +37,6 @@ void UrlClassifierFeatureFactory::Shutdown() { UrlClassifierFeatureCryptominingAnnotation::MaybeShutdown(); UrlClassifierFeatureCryptominingProtection::MaybeShutdown(); UrlClassifierFeatureConsentManagerAnnotation::MaybeShutdown(); - UrlClassifierFeatureAntiFraudAnnotation::MaybeShutdown(); UrlClassifierFeatureEmailTrackingDataCollection::MaybeShutdown(); UrlClassifierFeatureEmailTrackingProtection::MaybeShutdown(); UrlClassifierFeatureFingerprintingAnnotation::MaybeShutdown(); @@ -82,14 +80,6 @@ void UrlClassifierFeatureFactory::GetFeaturesFromChannel( aFeatures.AppendElement(feature); } - // Anti-fraud Annotation - // This must be run before any blocking features because the annotation will - // affect whether the channel should be blocked. - feature = UrlClassifierFeatureAntiFraudAnnotation::MaybeCreate(aChannel); - if (feature) { - aFeatures.AppendElement(feature); - } - // Email Tracking Protection feature = UrlClassifierFeatureEmailTrackingProtection::MaybeCreate(aChannel); if (feature) { @@ -160,12 +150,6 @@ UrlClassifierFeatureFactory::GetFeatureByName(const nsACString& aName) { nsCOMPtr feature; - // Anti-fraud Annotation - feature = UrlClassifierFeatureAntiFraudAnnotation::GetIfNameMatches(aName); - if (feature) { - return feature.forget(); - } - // Cryptomining Annotation feature = UrlClassifierFeatureCryptominingAnnotation::GetIfNameMatches(aName); if (feature) { @@ -256,12 +240,6 @@ void UrlClassifierFeatureFactory::GetFeatureNames(nsTArray& aArray) { nsAutoCString name; - // Anti-fraud Annotation - name.Assign(UrlClassifierFeatureAntiFraudAnnotation::Name()); - if (!name.IsEmpty()) { - aArray.AppendElement(name); - } - // Cryptomining Annotation name.Assign(UrlClassifierFeatureCryptominingAnnotation::Name()); if (!name.IsEmpty()) { diff --git a/netwerk/url-classifier/moz.build b/netwerk/url-classifier/moz.build index 27cf28c047fe..564083d8a528 100644 --- a/netwerk/url-classifier/moz.build +++ b/netwerk/url-classifier/moz.build @@ -36,7 +36,6 @@ UNIFIED_SOURCES += [ "UrlClassifierCommon.cpp", "UrlClassifierExceptionList.cpp", "UrlClassifierExceptionListEntry.cpp", - "UrlClassifierFeatureAntiFraudAnnotation.cpp", "UrlClassifierFeatureBase.cpp", "UrlClassifierFeatureConsentManagerAnnotation.cpp", "UrlClassifierFeatureCryptominingAnnotation.cpp", diff --git a/toolkit/components/extensions/schemas/web_request.json b/toolkit/components/extensions/schemas/web_request.json index 05cad190b329..8d3c505710b2 100644 --- a/toolkit/components/extensions/schemas/web_request.json +++ b/toolkit/components/extensions/schemas/web_request.json @@ -401,6 +401,7 @@ "cryptomining_content", "emailtracking", "emailtracking_content", + "consentmanager", "tracking", "tracking_ad", "tracking_analytics", @@ -408,9 +409,7 @@ "tracking_content", "any_basic_tracking", "any_strict_tracking", - "any_social_tracking", - "consentmanager", - "antifraud" + "any_social_tracking" ], "description": "Tracking flags that match our internal tracking classification" }, diff --git a/toolkit/components/extensions/webrequest/ChannelWrapper.cpp b/toolkit/components/extensions/webrequest/ChannelWrapper.cpp index 906366a33698..909b2a735517 100644 --- a/toolkit/components/extensions/webrequest/ChannelWrapper.cpp +++ b/toolkit/components/extensions/webrequest/ChannelWrapper.cpp @@ -66,6 +66,7 @@ static const ClassificationStruct classificationArray[] = { {CF::CLASSIFIED_CRYPTOMINING_CONTENT, MUC::Cryptomining_content}, {CF::CLASSIFIED_EMAILTRACKING, MUC::Emailtracking}, {CF::CLASSIFIED_EMAILTRACKING_CONTENT, MUC::Emailtracking_content}, + {CF::CLASSIFIED_CONSENTMANAGER, MUC::Consentmanager}, {CF::CLASSIFIED_TRACKING, MUC::Tracking}, {CF::CLASSIFIED_TRACKING_AD, MUC::Tracking_ad}, {CF::CLASSIFIED_TRACKING_ANALYTICS, MUC::Tracking_analytics}, @@ -77,9 +78,7 @@ static const ClassificationStruct classificationArray[] = { {CF::CLASSIFIED_SOCIALTRACKING_TWITTER, MUC::Socialtracking_twitter}, {CF::CLASSIFIED_ANY_BASIC_TRACKING, MUC::Any_basic_tracking}, {CF::CLASSIFIED_ANY_STRICT_TRACKING, MUC::Any_strict_tracking}, - {CF::CLASSIFIED_ANY_SOCIAL_TRACKING, MUC::Any_social_tracking}, - {CF::CLASSIFIED_CONSENTMANAGER, MUC::Consentmanager}, - {CF::CLASSIFIED_ANTIFRAUD, MUC::Antifraud}}; + {CF::CLASSIFIED_ANY_SOCIAL_TRACKING, MUC::Any_social_tracking}}; /***************************************************************************** * Lifetimes diff --git a/toolkit/components/url-classifier/SafeBrowsing.sys.mjs b/toolkit/components/url-classifier/SafeBrowsing.sys.mjs index afb274b5dbee..2cb201b1a9bc 100644 --- a/toolkit/components/url-classifier/SafeBrowsing.sys.mjs +++ b/toolkit/components/url-classifier/SafeBrowsing.sys.mjs @@ -296,24 +296,6 @@ const FEATURES = [ ); }, }, - { - name: "antifraud-annotation", - list: [ - "urlclassifier.features.antifraud.annotate.blocklistTables", - "urlclassifier.features.antifraud.annotate.allowlistTables", - ], - enabled() { - return Services.prefs.getBoolPref( - "privacy.trackingprotection.antifraud.annotate_channels" - ); - }, - update() { - return Services.prefs.getBoolPref( - "browser.safebrowsing.features.antifraud.annotate.update", - this.enabled() - ); - }, - }, ]; export var SafeBrowsing = { diff --git a/toolkit/components/url-classifier/tests/UrlClassifierTestUtils.sys.mjs b/toolkit/components/url-classifier/tests/UrlClassifierTestUtils.sys.mjs index 7235038148c7..db4ec8a46bca 100644 --- a/toolkit/components/url-classifier/tests/UrlClassifierTestUtils.sys.mjs +++ b/toolkit/components/url-classifier/tests/UrlClassifierTestUtils.sys.mjs @@ -21,9 +21,6 @@ const EMAIL_TRACKING_TABLE_PREF = const CONSENTMANAGER_ANNOTATION_TABLE_NAME = "mochitest6-track-simple"; const CONSENTMANAGER_ANNOTATION_TABLE_PREF = "urlclassifier.features.consentmanager.annotate.blocklistTables"; -const ANTIFRAUD_ANNOTATION_TABLE_NAME = "mochitest7-track-simple"; -const ANTIFRAUD_ANNOTATION_TABLE_PREF = - "urlclassifier.features.antifraud.annotate.blocklistTables"; let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); @@ -43,7 +40,6 @@ export var UrlClassifierTestUtils = { let socialTrackingURL = "social-tracking.example.org/"; let emailTrackingURL = "email-tracking.example.org/"; let consentmanagerAnnotationURL = "consent-manager.example.org/"; - let antifraudAnnotationURL = "anti-fraud.example.org/"; let annotationUpdate = "n:1000\ni:" + @@ -78,11 +74,6 @@ export var UrlClassifierTestUtils = { consentmanagerAnnotationURL.length + "\n" + consentmanagerAnnotationURL + - "\n" + - "a:7:32:" + - antifraudAnnotationURL.length + - "\n" + - antifraudAnnotationURL + "\n"; let socialAnnotationUpdate = "n:1000\ni:" + @@ -102,15 +93,6 @@ export var UrlClassifierTestUtils = { "\n" + consentmanagerAnnotationURL + "\n"; - let antifraudAnnotationUpdate = - "n:1000\ni:" + - ANTIFRAUD_ANNOTATION_TABLE_NAME + - "\nad:1\n" + - "a:1:32:" + - antifraudAnnotationURL.length + - "\n" + - antifraudAnnotationURL + - "\n"; let annotationEntitylistUpdate = "n:1000\ni:" + ANNOTATION_ENTITYLIST_TABLE_NAME + @@ -143,11 +125,6 @@ export var UrlClassifierTestUtils = { consentmanagerAnnotationURL.length + "\n" + consentmanagerAnnotationURL + - "\n" + - "a:5:32:" + - antifraudAnnotationURL.length + - "\n" + - antifraudAnnotationURL + "\n"; let socialTrackingUpdate = "n:1000\ni:" + @@ -193,11 +170,6 @@ export var UrlClassifierTestUtils = { name: CONSENTMANAGER_ANNOTATION_TABLE_PREF, update: consentmanagerAnnotationUpdate, }, - { - pref: ANTIFRAUD_ANNOTATION_TABLE_NAME, - name: ANTIFRAUD_ANNOTATION_TABLE_PREF, - update: antifraudAnnotationUpdate, - }, { pref: ANNOTATION_ENTITYLIST_TABLE_PREF, name: ANNOTATION_ENTITYLIST_TABLE_NAME, @@ -251,7 +223,6 @@ export var UrlClassifierTestUtils = { Services.prefs.clearUserPref(ANNOTATION_TABLE_PREF); Services.prefs.clearUserPref(SOCIAL_ANNOTATION_TABLE_PREF); Services.prefs.clearUserPref(CONSENTMANAGER_ANNOTATION_TABLE_PREF); - Services.prefs.clearUserPref(ANTIFRAUD_ANNOTATION_TABLE_PREF); Services.prefs.clearUserPref(ANNOTATION_ENTITYLIST_TABLE_PREF); Services.prefs.clearUserPref(TRACKING_TABLE_PREF); Services.prefs.clearUserPref(SOCIAL_TRACKING_TABLE_PREF); diff --git a/toolkit/components/url-classifier/tests/browser/browser.toml b/toolkit/components/url-classifier/tests/browser/browser.toml index ff00f66d42b0..8d7658542f7e 100644 --- a/toolkit/components/url-classifier/tests/browser/browser.toml +++ b/toolkit/components/url-classifier/tests/browser/browser.toml @@ -1,12 +1,9 @@ [DEFAULT] support-files = [ - "head.js", "page.html", "raptor.jpg", ] -["browser_antifraud_annotation.js"] - ["browser_consentmanager_annotation.js"] ["browser_emailtracking_telemetry.js"] diff --git a/toolkit/components/url-classifier/tests/browser/browser_antifraud_annotation.js b/toolkit/components/url-classifier/tests/browser/browser_antifraud_annotation.js deleted file mode 100644 index 75ad8881af7a..000000000000 --- a/toolkit/components/url-classifier/tests/browser/browser_antifraud_annotation.js +++ /dev/null @@ -1,89 +0,0 @@ -/* 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/. */ -"use strict"; - -let { UrlClassifierTestUtils } = ChromeUtils.importESModule( - "resource://testing-common/UrlClassifierTestUtils.sys.mjs" -); - -const ANTIFRAUD_DOMAIN = "https://anti-fraud.example.org/"; -const ANTIFRAUD_IMAGE = ANTIFRAUD_DOMAIN + TEST_PATH + "raptor.jpg"; - -async function tryLoadingImageAndCheckAntiFraudFlags(tab, shouldLoad) { - let channelCheckPromise = checkChannelClassificationsFlags( - ANTIFRAUD_DOMAIN, - Ci.nsIClassifiedChannel.CLASSIFIED_ANTIFRAUD - ); - - let isImageLoaded = await loadImage(tab.linkedBrowser, ANTIFRAUD_IMAGE); - - if (shouldLoad) { - ok(isImageLoaded, "Image should be loaded"); - } else { - ok(!isImageLoaded, "Image should not be loaded"); - } - - return channelCheckPromise; -} - -add_setup(async function () { - await UrlClassifierTestUtils.addTestTrackers(); - - registerCleanupFunction(function () { - UrlClassifierTestUtils.cleanupTestTrackers(); - }); - - await SpecialPowers.pushPrefEnv({ - set: [ - [ - "urlclassifier.features.antifraud.annotate.blocklistTables", - "mochitest7-track-simple", - ], - - ["privacy.trackingprotection.enabled", true], - ["privacy.trackingprotection.annotate_channels", true], - ["privacy.trackingprotection.cryptomining.enabled", false], - ["privacy.trackingprotection.emailtracking.enabled", false], - ["privacy.trackingprotection.fingerprinting.enabled", false], - ["privacy.trackingprotection.socialtracking.enabled", false], - ["privacy.trackingprotection.consentmanager.annotate_channels", false], - ["privacy.trackingprotection.antifraud.annotate_channels", true], - - ["privacy.trackingprotection.antifraud.skip.enabled", false], - ["privacy.trackingprotection.antifraud.skip.pbmode.enabled", false], - ], - }); -}); - -add_task(async function test_antifraud_annotation_unblocking_off() { - // check antifraud still blocked when skip is disabled - await SpecialPowers.pushPrefEnv({ - set: [["privacy.trackingprotection.fingerprinting.enabled", true]], - }); - - const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE); - - await tryLoadingImageAndCheckAntiFraudFlags(tab, false); - - await BrowserTestUtils.removeTab(tab); -}); - -add_task(async function test_antifraud_annotation_unblocking_on() { - // check that antifraud not blocked when skip is enabled - await SpecialPowers.pushPrefEnv({ - set: [ - ["privacy.trackingprotection.fingerprinting.enabled", true], - - ["privacy.trackingprotection.antifraud.skip.enabled", true], - ["privacy.trackingprotection.antifraud.skip.pbmode.enabled", true], - ], - }); - - const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE); - - await tryLoadingImageAndCheckAntiFraudFlags(tab, true); - - await BrowserTestUtils.removeTab(tab); - await SpecialPowers.popPrefEnv(); -}); diff --git a/toolkit/components/url-classifier/tests/browser/browser_consentmanager_annotation.js b/toolkit/components/url-classifier/tests/browser/browser_consentmanager_annotation.js index 3f3ff606e085..66433d09b78d 100644 --- a/toolkit/components/url-classifier/tests/browser/browser_consentmanager_annotation.js +++ b/toolkit/components/url-classifier/tests/browser/browser_consentmanager_annotation.js @@ -7,9 +7,46 @@ let { UrlClassifierTestUtils } = ChromeUtils.importESModule( "resource://testing-common/UrlClassifierTestUtils.sys.mjs" ); +const TEST_DOMAIN = "https://example.com/"; +const TEST_PATH = "browser/toolkit/components/url-classifier/tests/browser/"; + +const TEST_PAGE = TEST_DOMAIN + TEST_PATH + "page.html"; + const CONSENTMANAGER_DOMAIN = "https://consent-manager.example.org/"; const CONSENTMANAGER_IMAGE = CONSENTMANAGER_DOMAIN + TEST_PATH + "raptor.jpg"; +function loadImage(browser, url) { + return SpecialPowers.spawn(browser, [url], page => { + return new Promise(resolve => { + let image = new content.Image(); + image.src = page + "?" + Math.random(); + image.onload = _ => resolve(true); + image.onerror = _ => resolve(false); + }); + }); +} + +function checkChannelClassificationsFlags(expectedURLPrePath, flags) { + return TestUtils.topicObserved("http-on-modify-request", subject => { + let httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); + + if (!httpChannel.URI.spec.startsWith(expectedURLPrePath)) { + // this is not the request we are looking for + // we use the prepath and not the spec because the query is randomly generated in the + // loaded image + return false; + } + + ok( + subject.QueryInterface(Ci.nsIClassifiedChannel).classificationFlags & + flags, + "Classification flags should match expected" + ); + + return true; + }); +} + async function tryLoadingImageAndCheckConsentManagerFlags(tab, shouldLoad) { let channelCheckPromise = checkChannelClassificationsFlags( CONSENTMANAGER_DOMAIN, @@ -47,7 +84,6 @@ add_setup(async function () { ["privacy.trackingprotection.emailtracking.enabled", false], ["privacy.trackingprotection.fingerprinting.enabled", false], ["privacy.trackingprotection.socialtracking.enabled", false], - ["privacy.trackingprotection.antifraud.annotate_channels", false], ["privacy.trackingprotection.consentmanager.annotate_channels", true], ["privacy.trackingprotection.consentmanager.skip.enabled", false], diff --git a/toolkit/components/url-classifier/tests/browser/browser_emailtracking_telemetry.js b/toolkit/components/url-classifier/tests/browser/browser_emailtracking_telemetry.js index 36f68b99ac9c..086ca49afe76 100644 --- a/toolkit/components/url-classifier/tests/browser/browser_emailtracking_telemetry.js +++ b/toolkit/components/url-classifier/tests/browser/browser_emailtracking_telemetry.js @@ -14,6 +14,7 @@ const TEST_EMAIL_WEBAPP_DOMAIN = "https://test1.example.com/"; const EMAIL_TRACKER_DOMAIN = "https://email-tracking.example.org/"; const TEST_PATH = "browser/toolkit/components/url-classifier/tests/browser/"; +const TEST_PAGE = TEST_DOMAIN + TEST_PATH + "page.html"; const TEST_EMAIL_WEBAPP_PAGE = TEST_EMAIL_WEBAPP_DOMAIN + TEST_PATH + "page.html"; @@ -44,6 +45,17 @@ async function clearTelemetry() { .clear(); } +async function loadImage(browser, url) { + return SpecialPowers.spawn(browser, [url], page => { + return new Promise(resolve => { + let image = new content.Image(); + image.src = page + "?" + Math.random(); + image.onload = _ => resolve(true); + image.onerror = _ => resolve(false); + }); + }); +} + async function getTelemetryProbe(key, label, checkCntFn) { let histogram; diff --git a/toolkit/components/url-classifier/tests/browser/head.js b/toolkit/components/url-classifier/tests/browser/head.js deleted file mode 100644 index 0feedb436308..000000000000 --- a/toolkit/components/url-classifier/tests/browser/head.js +++ /dev/null @@ -1,41 +0,0 @@ -/* 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/. */ - -"use strict"; - -const TEST_DOMAIN = "https://example.com/"; -const TEST_PATH = "browser/toolkit/components/url-classifier/tests/browser/"; -const TEST_PAGE = TEST_DOMAIN + TEST_PATH + "page.html"; - -async function loadImage(browser, url) { - return SpecialPowers.spawn(browser, [url], page => { - return new Promise(resolve => { - let image = new content.Image(); - image.src = page + "?" + Math.random(); - image.onload = _ => resolve(true); - image.onerror = _ => resolve(false); - }); - }); -} - -function checkChannelClassificationsFlags(expectedURLPrePath, flags) { - return TestUtils.topicObserved("http-on-modify-request", subject => { - let httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); - - if (!httpChannel.URI.spec.startsWith(expectedURLPrePath)) { - // this is not the request we are looking for - // we use the prepath and not the spec because the query is randomly generated in the - // loaded image - return false; - } - - ok( - subject.QueryInterface(Ci.nsIClassifiedChannel).classificationFlags & - flags, - "Classification flags should match expected" - ); - - return true; - }); -}