summaryrefslogtreecommitdiffstats
path: root/toolkit/components/antitracking/ContentBlockingAllowList.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
commit40a355a42d4a9444dc753c04c6608dade2f06a23 (patch)
tree871fc667d2de662f171103ce5ec067014ef85e61 /toolkit/components/antitracking/ContentBlockingAllowList.cpp
parentAdding upstream version 124.0.1. (diff)
downloadfirefox-adbda400be353e676059e335c3c0aaf99e719475.tar.xz
firefox-adbda400be353e676059e335c3c0aaf99e719475.zip
Adding upstream version 125.0.1.upstream/125.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/antitracking/ContentBlockingAllowList.cpp')
-rw-r--r--toolkit/components/antitracking/ContentBlockingAllowList.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/toolkit/components/antitracking/ContentBlockingAllowList.cpp b/toolkit/components/antitracking/ContentBlockingAllowList.cpp
index 25806cd1e7..660906a49c 100644
--- a/toolkit/components/antitracking/ContentBlockingAllowList.cpp
+++ b/toolkit/components/antitracking/ContentBlockingAllowList.cpp
@@ -17,7 +17,9 @@
#include "nsICookieJarSettings.h"
#include "nsIHttpChannel.h"
#include "nsIHttpChannelInternal.h"
+#include "nsIPermission.h"
#include "nsNetUtil.h"
+#include "nsString.h"
using namespace mozilla;
@@ -255,3 +257,70 @@ nsresult ContentBlockingAllowList::Check(
returnInputArgument.release();
principal.forget(aPrincipal);
}
+
+// ContentBlockingAllowListCache
+
+nsresult ContentBlockingAllowListCache::CheckForBaseDomain(
+ const nsACString& aBaseDomain, const OriginAttributes& aOriginAttributes,
+ bool& aIsAllowListed) {
+ MOZ_ASSERT(XRE_IsParentProcess());
+ NS_ENSURE_TRUE(!aBaseDomain.IsEmpty(), NS_ERROR_INVALID_ARG);
+ aIsAllowListed = false;
+
+ // Ensure we have the permission list.
+ nsresult rv = EnsureInit();
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ if (aOriginAttributes.mPrivateBrowsingId > 0) {
+ aIsAllowListed = mEntriesPrivateBrowsing.Contains(aBaseDomain);
+ } else {
+ aIsAllowListed = mEntries.Contains(aBaseDomain);
+ }
+
+ return NS_OK;
+}
+
+nsresult ContentBlockingAllowListCache::EnsureInit() {
+ MOZ_ASSERT(XRE_IsParentProcess());
+
+ if (mIsInitialized) {
+ return NS_OK;
+ }
+ mIsInitialized = true;
+
+ // 1. Get all permissions representing allow-list entries.
+ PermissionManager* permManager = PermissionManager::GetInstance();
+ NS_ENSURE_TRUE(permManager, NS_ERROR_FAILURE);
+
+ nsTArray<nsCString> types;
+ types.AppendElement("trackingprotection");
+ types.AppendElement("trackingprotection-pb");
+
+ nsTArray<RefPtr<nsIPermission>> permissions;
+ nsresult rv = permManager->GetAllByTypes(types, permissions);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ // 2. Populate mEntries and mEntriesPrivateBrowsing from permission list for
+ // faster lookup.
+ for (auto& permission : permissions) {
+ MOZ_ASSERT(permission);
+
+ nsCOMPtr<nsIPrincipal> principal;
+ rv = permission->GetPrincipal(getter_AddRefs(principal));
+ NS_ENSURE_SUCCESS(rv, rv);
+ MOZ_ASSERT(principal);
+
+ nsAutoCString baseDomain;
+ rv = principal->GetBaseDomain(baseDomain);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ // Sort base domains into sets for normal / private browsing.
+ if (principal->OriginAttributesRef().mPrivateBrowsingId > 0) {
+ mEntriesPrivateBrowsing.Insert(baseDomain);
+ } else {
+ mEntries.Insert(baseDomain);
+ }
+ }
+
+ return NS_OK;
+}