From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../antitracking/RejectForeignAllowList.cpp | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 toolkit/components/antitracking/RejectForeignAllowList.cpp (limited to 'toolkit/components/antitracking/RejectForeignAllowList.cpp') diff --git a/toolkit/components/antitracking/RejectForeignAllowList.cpp b/toolkit/components/antitracking/RejectForeignAllowList.cpp new file mode 100644 index 0000000000..3af0494558 --- /dev/null +++ b/toolkit/components/antitracking/RejectForeignAllowList.cpp @@ -0,0 +1,127 @@ +/* -*- 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 "RejectForeignAllowList.h" +#include "mozilla/dom/Document.h" +#include "mozilla/BasePrincipal.h" +#include "mozilla/ClearOnShutdown.h" +#include "mozilla/StaticPtr.h" +#include "nsIHttpChannel.h" +#include "nsIURI.h" +#include "nsNetUtil.h" +#include "nsScriptSecurityManager.h" + +#define REJECTFOREIGNALLOWLIST_PREF "privacy.rejectForeign.allowList"_ns +#define REJECTFOREIGNALLOWLIST_NAME "RejectForeignAllowList"_ns + +namespace mozilla { + +namespace { + +StaticRefPtr gRejectForeignAllowList; + +} // namespace + +// static +bool RejectForeignAllowList::Check(dom::Document* aDocument) { + MOZ_ASSERT(aDocument); + + nsIURI* documentURI = aDocument->GetDocumentURI(); + if (!documentURI) { + return false; + } + + return GetOrCreate()->CheckInternal(documentURI); +} + +// static +bool RejectForeignAllowList::Check(nsIHttpChannel* aChannel) { + MOZ_ASSERT(aChannel); + + nsCOMPtr channelURI; + nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(channelURI)); + if (NS_WARN_IF(NS_FAILED(rv))) { + return false; + } + + return GetOrCreate()->CheckInternal(channelURI); +} + +// static +bool RejectForeignAllowList::Check(nsIPrincipal* aPrincipal) { + return GetOrCreate()->CheckInternal(aPrincipal); +} + +// static +RejectForeignAllowList* RejectForeignAllowList::GetOrCreate() { + if (!gRejectForeignAllowList) { + gRejectForeignAllowList = new RejectForeignAllowList(); + + nsCOMPtr exceptionListService = + do_GetService("@mozilla.org/url-classifier/exception-list-service;1"); + if (exceptionListService) { + exceptionListService->RegisterAndRunExceptionListObserver( + REJECTFOREIGNALLOWLIST_NAME, REJECTFOREIGNALLOWLIST_PREF, + gRejectForeignAllowList); + } + + RunOnShutdown([exceptionListService] { + if (gRejectForeignAllowList) { + if (exceptionListService) { + exceptionListService->UnregisterExceptionListObserver( + REJECTFOREIGNALLOWLIST_NAME, gRejectForeignAllowList); + } + gRejectForeignAllowList = nullptr; + } + }); + } + + return gRejectForeignAllowList; +} + +// static +bool RejectForeignAllowList::Check(nsIURI* aURI) { + return GetOrCreate()->CheckInternal(aURI); +} + +bool RejectForeignAllowList::CheckInternal(nsIURI* aURI) { + MOZ_ASSERT(aURI); + return nsContentUtils::IsURIInList(aURI, mList); +} + +bool RejectForeignAllowList::CheckInternal(nsIPrincipal* aPrincipal) { + MOZ_ASSERT(aPrincipal); + + auto* basePrin = BasePrincipal::Cast(aPrincipal); + if (!basePrin) { + return false; + } + + bool result = false; + basePrin->IsURIInList(mList, &result); + + return result; +} + +NS_IMETHODIMP +RejectForeignAllowList::OnExceptionListUpdate(const nsACString& aList) { + mList = aList; + return NS_OK; +} + +RejectForeignAllowList::RejectForeignAllowList() = default; +RejectForeignAllowList::~RejectForeignAllowList() = default; + +NS_INTERFACE_MAP_BEGIN(RejectForeignAllowList) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, + nsIUrlClassifierExceptionListObserver) + NS_INTERFACE_MAP_ENTRY(nsIUrlClassifierExceptionListObserver) +NS_INTERFACE_MAP_END + +NS_IMPL_ADDREF(RejectForeignAllowList) +NS_IMPL_RELEASE(RejectForeignAllowList) + +} // namespace mozilla -- cgit v1.2.3