зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1731999 - Part 2: Use regular principal for service workers if pref 'privacy.partition.serviceWorkers' is false. r=pbz
Differential Revision: https://phabricator.services.mozilla.com/D131787
This commit is contained in:
Родитель
bee9196df8
Коммит
bf00e6e2cf
|
@ -81,6 +81,7 @@
|
|||
#include "mozilla/Sprintf.h"
|
||||
#include "mozilla/StaticPrefs_browser.h"
|
||||
#include "mozilla/StaticPrefs_dom.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/StorageAccess.h"
|
||||
#include "mozilla/StoragePrincipalHelper.h"
|
||||
#include "mozilla/TaskCategory.h"
|
||||
|
@ -1866,8 +1867,12 @@ nsresult nsGlobalWindowInner::EnsureClientSource() {
|
|||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> foreignPartitionedPrincipal;
|
||||
|
||||
nsresult rv = StoragePrincipalHelper::GetPrincipal(
|
||||
this, StoragePrincipalHelper::eForeignPartitionedPrincipal,
|
||||
this,
|
||||
StaticPrefs::privacy_partition_serviceWorkers()
|
||||
? StoragePrincipalHelper::eForeignPartitionedPrincipal
|
||||
: StoragePrincipalHelper::eRegularPrincipal,
|
||||
getter_AddRefs(foreignPartitionedPrincipal));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "mozilla/dom/ClientsBinding.h"
|
||||
#include "mozilla/dom/ServiceWorkerDescriptor.h"
|
||||
#include "mozilla/ipc/BackgroundUtils.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/StoragePrincipalHelper.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIAsyncVerifyRedirectCallback.h"
|
||||
|
@ -111,7 +112,9 @@ class ClientChannelHelper : public nsIInterfaceRequestor,
|
|||
nsCOMPtr<nsIPrincipal> foreignPartitionedPrincipal;
|
||||
rv = StoragePrincipalHelper::GetPrincipal(
|
||||
aNewChannel,
|
||||
StoragePrincipalHelper::eForeignPartitionedPrincipal,
|
||||
StaticPrefs::privacy_partition_serviceWorkers()
|
||||
? StoragePrincipalHelper::eForeignPartitionedPrincipal
|
||||
: StoragePrincipalHelper::eRegularPrincipal,
|
||||
getter_AddRefs(foreignPartitionedPrincipal));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
reservedClient.reset();
|
||||
|
@ -132,7 +135,10 @@ class ClientChannelHelper : public nsIInterfaceRequestor,
|
|||
else {
|
||||
nsCOMPtr<nsIPrincipal> foreignPartitionedPrincipal;
|
||||
rv = StoragePrincipalHelper::GetPrincipal(
|
||||
aNewChannel, StoragePrincipalHelper::eForeignPartitionedPrincipal,
|
||||
aNewChannel,
|
||||
StaticPrefs::privacy_partition_serviceWorkers()
|
||||
? StoragePrincipalHelper::eForeignPartitionedPrincipal
|
||||
: StoragePrincipalHelper::eRegularPrincipal,
|
||||
getter_AddRefs(foreignPartitionedPrincipal));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
@ -298,7 +304,10 @@ nsresult AddClientChannelHelperInternal(nsIChannel* aChannel,
|
|||
|
||||
nsCOMPtr<nsIPrincipal> channelForeignPartitionedPrincipal;
|
||||
nsresult rv = StoragePrincipalHelper::GetPrincipal(
|
||||
aChannel, StoragePrincipalHelper::eForeignPartitionedPrincipal,
|
||||
aChannel,
|
||||
StaticPrefs::privacy_partition_serviceWorkers()
|
||||
? StoragePrincipalHelper::eForeignPartitionedPrincipal
|
||||
: StoragePrincipalHelper::eRegularPrincipal,
|
||||
getter_AddRefs(channelForeignPartitionedPrincipal));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "mozilla/LoadInfo.h"
|
||||
#include "mozilla/SchedulerGroup.h"
|
||||
#include "mozilla/StaticPrefs_extensions.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/StorageAccess.h"
|
||||
#include "mozilla/StoragePrincipalHelper.h"
|
||||
#include "mozilla/dom/ClientIPCTypes.h"
|
||||
|
@ -613,7 +614,10 @@ void ServiceWorkerContainer::GetScopeForUrl(const nsAString& aUrl,
|
|||
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
nsresult rv = StoragePrincipalHelper::GetPrincipal(
|
||||
window, StoragePrincipalHelper::eForeignPartitionedPrincipal,
|
||||
window,
|
||||
StaticPrefs::privacy_partition_serviceWorkers()
|
||||
? StoragePrincipalHelper::eForeignPartitionedPrincipal
|
||||
: StoragePrincipalHelper::eRegularPrincipal,
|
||||
getter_AddRefs(principal));
|
||||
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "mozilla/BasePrincipal.h"
|
||||
#include "mozilla/StaticPrefs_dom.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/StorageAccess.h"
|
||||
#include "mozilla/StoragePrincipalHelper.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
@ -66,7 +67,10 @@ ServiceWorkerInterceptController::ShouldPrepareForIntercept(
|
|||
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
nsresult rv = StoragePrincipalHelper::GetPrincipal(
|
||||
aChannel, StoragePrincipalHelper::eForeignPartitionedPrincipal,
|
||||
aChannel,
|
||||
StaticPrefs::privacy_partition_serviceWorkers()
|
||||
? StoragePrincipalHelper::eForeignPartitionedPrincipal
|
||||
: StoragePrincipalHelper::eRegularPrincipal,
|
||||
getter_AddRefs(principal));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
#include "mozilla/PermissionManager.h"
|
||||
#include "mozilla/ScopeExit.h"
|
||||
#include "mozilla/StaticPrefs_extensions.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/StoragePrincipalHelper.h"
|
||||
#include "mozilla/Unused.h"
|
||||
#include "mozilla/EnumSet.h"
|
||||
|
@ -2044,9 +2045,11 @@ void ServiceWorkerManager::DispatchFetchEvent(nsIInterceptedChannel* aChannel,
|
|||
|
||||
// non-subresource request means the URI contains the principal
|
||||
OriginAttributes attrs = loadInfo->GetOriginAttributes();
|
||||
StoragePrincipalHelper::GetOriginAttributes(
|
||||
internalChannel, attrs,
|
||||
StoragePrincipalHelper::eForeignPartitionedPrincipal);
|
||||
if (StaticPrefs::privacy_partition_serviceWorkers()) {
|
||||
StoragePrincipalHelper::GetOriginAttributes(
|
||||
internalChannel, attrs,
|
||||
StoragePrincipalHelper::eForeignPartitionedPrincipal);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal =
|
||||
BasePrincipal::CreateContentPrincipal(uri, attrs);
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
#include "mozilla/Telemetry.h"
|
||||
#include "mozilla/DebugOnly.h"
|
||||
#include "mozilla/StaticPrefs_dom.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/Unused.h"
|
||||
#include "nsIReferrerInfo.h"
|
||||
|
||||
|
@ -1691,12 +1692,18 @@ nsresult ServiceWorkerPrivate::SpawnWorkerIfNeeded(WakeUpReason aWhy,
|
|||
->SetPartitionKey(info.mResolvedScriptURI);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> partitionedPrincipal;
|
||||
StoragePrincipalHelper::CreatePartitionedPrincipalForServiceWorker(
|
||||
info.mPrincipal, info.mCookieJarSettings,
|
||||
getter_AddRefs(partitionedPrincipal));
|
||||
if (StaticPrefs::privacy_partition_serviceWorkers()) {
|
||||
nsCOMPtr<nsIPrincipal> partitionedPrincipal;
|
||||
StoragePrincipalHelper::CreatePartitionedPrincipalForServiceWorker(
|
||||
info.mPrincipal, info.mCookieJarSettings,
|
||||
getter_AddRefs(partitionedPrincipal));
|
||||
|
||||
info.mPartitionedPrincipal = partitionedPrincipal;
|
||||
info.mPartitionedPrincipal = partitionedPrincipal;
|
||||
} else {
|
||||
// The partitioned principal will be the same as the mPrincipal if
|
||||
// partitioned service worker is disabled.
|
||||
info.mPartitionedPrincipal = info.mPrincipal;
|
||||
}
|
||||
|
||||
info.mStorageAccess =
|
||||
StorageAllowedForServiceWorker(info.mPrincipal, info.mCookieJarSettings);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "mozilla/ipc/PBackgroundSharedTypes.h"
|
||||
#include "mozilla/ContentBlocking.h"
|
||||
#include "mozilla/ScopeExit.h"
|
||||
#include "mozilla/StaticPrefs_privacy.h"
|
||||
#include "mozilla/StorageAccess.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIDocShell.h"
|
||||
|
@ -362,6 +363,12 @@ bool StoragePrincipalHelper::ShouldUsePartitionPrincipalForServiceWorker(
|
|||
nsIDocShell* aDocShell) {
|
||||
MOZ_ASSERT(aDocShell);
|
||||
|
||||
// We don't use the partitioned principal for service workers if it's
|
||||
// disabled.
|
||||
if (!StaticPrefs::privacy_partition_serviceWorkers()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RefPtr<Document> document = aDocShell->GetExtantDocument();
|
||||
|
||||
// If we cannot get the document from the docShell, we turn to get its
|
||||
|
|
Загрузка…
Ссылка в новой задаче