Bug 1731557 - Part 1: Using an enum to represent storage permission in the loadInfo. r=pbz,necko-reviewers,dragana

To differentiate the storage permission is granted by either the
permission or the allowList, we need to change the hasStoragePermission
to an enum to represent the storage permission state.

This patch also changes the name of the attribute to make it reasonable
with respect to this change.

Differential Revision: https://phabricator.services.mozilla.com/D126276
This commit is contained in:
Tim Huang 2021-09-27 22:50:41 +00:00
Родитель 3517e4a3ea
Коммит 93a518fe4f
7 изменённых файлов: 46 добавлений и 22 удалений

Просмотреть файл

@ -526,7 +526,7 @@ nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo,
aLoadInfo->GetIsMediaRequest(), aLoadInfo->GetIsMediaInitialRequest(),
aLoadInfo->GetIsFromObjectOrEmbed(), cookieJarSettingsArgs,
aLoadInfo->GetRequestBlockingReason(), maybeCspToInheritInfo,
aLoadInfo->GetHasStoragePermission(), aLoadInfo->GetIsMetaRefresh(),
aLoadInfo->GetStoragePermission(), aLoadInfo->GetIsMetaRefresh(),
aLoadInfo->GetLoadingEmbedderPolicy(), unstrippedURI));
return NS_OK;
@ -762,7 +762,7 @@ nsresult LoadInfoArgsToLoadInfo(
loadInfoArgs.hasValidUserGestureActivation(),
loadInfoArgs.allowDeprecatedSystemRequests(),
loadInfoArgs.isInDevToolsContext(), loadInfoArgs.parserCreatedScript(),
loadInfoArgs.hasStoragePermission(), loadInfoArgs.isMetaRefresh(),
loadInfoArgs.storagePermission(), loadInfoArgs.isMetaRefresh(),
loadInfoArgs.requestBlockingReason(), loadingContext,
loadInfoArgs.loadingEmbedderPolicy(), loadInfoArgs.unstrippedURI());
@ -824,7 +824,7 @@ void LoadInfoToParentLoadInfoForwarder(
aLoadInfo->GetDocumentHasUserInteracted(),
aLoadInfo->GetAllowListFutureDocumentsCreatedFromThisRedirectChain(),
cookieJarSettingsArgs, aLoadInfo->GetRequestBlockingReason(),
aLoadInfo->GetHasStoragePermission(), aLoadInfo->GetIsMetaRefresh(),
aLoadInfo->GetStoragePermission(), aLoadInfo->GetIsMetaRefresh(),
aLoadInfo->GetIsThirdPartyContextToTopWindow(),
aLoadInfo->GetIsInThirdPartyContext(), unstrippedURI);
}
@ -895,8 +895,7 @@ nsresult MergeParentLoadInfoForwarder(
}
}
rv =
aLoadInfo->SetHasStoragePermission(aForwarderArgs.hasStoragePermission());
rv = aLoadInfo->SetStoragePermission(aForwarderArgs.storagePermission());
NS_ENSURE_SUCCESS(rv, rv);
rv = aLoadInfo->SetIsMetaRefresh(aForwarderArgs.isMetaRefresh());

Просмотреть файл

@ -581,7 +581,7 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
mAllowDeprecatedSystemRequests(rhs.mAllowDeprecatedSystemRequests),
mIsInDevToolsContext(rhs.mIsInDevToolsContext),
mParserCreatedScript(rhs.mParserCreatedScript),
mHasStoragePermission(rhs.mHasStoragePermission),
mStoragePermission(rhs.mStoragePermission),
mIsMetaRefresh(rhs.mIsMetaRefresh),
mIsFromProcessingFrameAttributes(rhs.mIsFromProcessingFrameAttributes),
mIsMediaRequest(rhs.mIsMediaRequest),
@ -624,7 +624,7 @@ LoadInfo::LoadInfo(
bool aSkipContentSniffing, uint32_t aHttpsOnlyStatus,
bool aHasValidUserGestureActivation, bool aAllowDeprecatedSystemRequests,
bool aIsInDevToolsContext, bool aParserCreatedScript,
bool aHasStoragePermission, bool aIsMetaRefresh,
nsILoadInfo::StoragePermissionState aStoragePermission, bool aIsMetaRefresh,
uint32_t aRequestBlockingReason, nsINode* aLoadingContext,
nsILoadInfo::CrossOriginEmbedderPolicy aLoadingEmbedderPolicy,
nsIURI* aUnstrippedURI)
@ -690,7 +690,7 @@ LoadInfo::LoadInfo(
mAllowDeprecatedSystemRequests(aAllowDeprecatedSystemRequests),
mIsInDevToolsContext(aIsInDevToolsContext),
mParserCreatedScript(aParserCreatedScript),
mHasStoragePermission(aHasStoragePermission),
mStoragePermission(aStoragePermission),
mIsMetaRefresh(aIsMetaRefresh),
mLoadingEmbedderPolicy(aLoadingEmbedderPolicy),
@ -999,14 +999,16 @@ LoadInfo::SetCookieJarSettings(nsICookieJarSettings* aCookieJarSettings) {
}
NS_IMETHODIMP
LoadInfo::GetHasStoragePermission(bool* aHasStoragePermission) {
*aHasStoragePermission = mHasStoragePermission;
LoadInfo::GetStoragePermission(
nsILoadInfo::StoragePermissionState* aStoragePermission) {
*aStoragePermission = mStoragePermission;
return NS_OK;
}
NS_IMETHODIMP
LoadInfo::SetHasStoragePermission(bool aHasStoragePermission) {
mHasStoragePermission = aHasStoragePermission;
LoadInfo::SetStoragePermission(
nsILoadInfo::StoragePermissionState aStoragePermission) {
mStoragePermission = aStoragePermission;
return NS_OK;
}

Просмотреть файл

@ -218,8 +218,9 @@ class LoadInfo final : public nsILoadInfo {
bool aSkipContentSniffing, uint32_t aHttpsOnlyStatus,
bool aHasValidUserGestureActivation, bool aAllowDeprecatedSystemRequests,
bool aIsInDevToolsContext, bool aParserCreatedScript,
bool aHasStoragePermission, bool aIsMetaRefresh,
uint32_t aRequestBlockingReason, nsINode* aLoadingContext,
nsILoadInfo::StoragePermissionState aStoragePermission,
bool aIsMetaRefresh, uint32_t aRequestBlockingReason,
nsINode* aLoadingContext,
nsILoadInfo::CrossOriginEmbedderPolicy aLoadingEmbedderPolicy,
nsIURI* aUnstrippedURI);
LoadInfo(const LoadInfo& rhs);
@ -320,7 +321,8 @@ class LoadInfo final : public nsILoadInfo {
bool mAllowDeprecatedSystemRequests = false;
bool mIsInDevToolsContext = false;
bool mParserCreatedScript = false;
bool mHasStoragePermission = false;
nsILoadInfo::StoragePermissionState mStoragePermission =
nsILoadInfo::NoStoragePermission;
bool mIsMetaRefresh = false;
// Is true if this load was triggered by processing the attributes of the

Просмотреть файл

@ -147,12 +147,14 @@ TRRLoadInfo::SetCookieJarSettings(nsICookieJarSettings* aCookieJarSettings) {
}
NS_IMETHODIMP
TRRLoadInfo::GetHasStoragePermission(bool* aHasStoragePermission) {
TRRLoadInfo::GetStoragePermission(
nsILoadInfo::StoragePermissionState* aHasStoragePermission) {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
TRRLoadInfo::SetHasStoragePermission(bool aHasStoragePermission) {
TRRLoadInfo::SetStoragePermission(
nsILoadInfo::StoragePermissionState aHasStoragePermission) {
return NS_ERROR_NOT_IMPLEMENTED;
}

Просмотреть файл

@ -541,11 +541,18 @@ interface nsILoadInfo : nsISupports
*/
attribute nsICookieJarSettings cookieJarSettings;
cenum StoragePermissionState : 8 {
NoStoragePermission = 0,
HasStoragePermission = 1,
StoragePermissionAllowListed = 2,
};
/**
* True if the loading document has the storage permission. This value would
* be set during opening the channel.
* The result of the storage permission check of the loading document. This
* value would be set during opening the channel.
*/
[infallible] attribute boolean hasStoragePermission;
[infallible] attribute nsILoadInfo_StoragePermissionState
storagePermission;
/**
* True if the load was triggered by a meta refresh.

Просмотреть файл

@ -19,6 +19,7 @@ include ProtocolTypes;
include "mozilla/dom/PropertyBagUtils.h";
include "mozilla/dom/ReferrerInfoUtils.h";
include "mozilla/ipc/URIUtils.h";
include "mozilla/AntiTrackingIPCUtils.h";
using mozilla::OriginAttributes from "mozilla/ipc/BackgroundUtils.h";
using RequestHeaderTuples from "mozilla/net/PHttpChannelParams.h";
@ -29,6 +30,7 @@ using class mozilla::TimeStamp from "mozilla/TimeStamp.h";
[RefCounted] using class nsDOMNavigationTiming from "nsDOMNavigationTiming.h";
using nsContentPolicyType from "nsIContentPolicy.h";
using nsILoadInfo::CrossOriginEmbedderPolicy from "nsILoadInfo.h";
using nsILoadInfo::StoragePermissionState from "nsILoadInfo.h";
using class mozilla::dom::LoadingSessionHistoryInfo from "mozilla/dom/SessionHistoryEntry.h";
namespace mozilla {
@ -157,7 +159,7 @@ struct LoadInfoArgs
CookieJarSettingsArgs cookieJarSettings;
uint32_t requestBlockingReason;
CSPInfo? cspToInheritInfo;
bool hasStoragePermission;
StoragePermissionState storagePermission;
bool isMetaRefresh;
CrossOriginEmbedderPolicy loadingEmbedderPolicy;
nsIURI unstrippedURI;
@ -223,7 +225,7 @@ struct ParentLoadInfoForwarderArgs
uint32_t requestBlockingReason;
bool hasStoragePermission;
StoragePermissionState storagePermission;
bool isMetaRefresh;

Просмотреть файл

@ -12,6 +12,8 @@
#include "mozilla/ContentBlockingNotifier.h"
#include "mozilla/ContentBlocking.h"
#include "nsILoadInfo.h"
namespace IPC {
// For allowing passing the enum
@ -43,6 +45,14 @@ struct ParamTraits<mozilla::ContentBlocking::StorageAccessPromptChoices>
mozilla::ContentBlocking::StorageAccessPromptChoices::eAllow,
mozilla::ContentBlocking::StorageAccessPromptChoices::
eAllowAutoGrant> {};
// nsILoadInfo::StoragePermissionState over IPC.
template <>
struct ParamTraits<nsILoadInfo::StoragePermissionState>
: public ContiguousEnumSerializerInclusive<
nsILoadInfo::StoragePermissionState,
nsILoadInfo::StoragePermissionState::NoStoragePermission,
nsILoadInfo::StoragePermissionState::StoragePermissionAllowListed> {};
} // namespace IPC
#endif // mozilla_antitrackingipcutils_h