Backed out 3 changesets (bug 1551055) for causing xpcshell localStorage perma failures CLOSED TREE

Backed out changeset 21e44ad9c6df (bug 1551055)
Backed out changeset 8727e61ab69b (bug 1551055)
Backed out changeset d99a6769beb4 (bug 1551055)

--HG--
extra : rebase_source : 56f7fe5c54cd7e4109acce5074be1aba12e91086
This commit is contained in:
Ciure Andrei 2019-05-13 22:40:22 +03:00
parent f103a392a0
commit f1dd75ca22
26 changed files with 613 additions and 857 deletions

View File

@ -389,8 +389,8 @@ class nsGlobalWindowObserver final : public nsIObserver,
}
}
nsIPrincipal* GetEffectiveStoragePrincipal() const override {
return mWindow ? mWindow->GetEffectiveStoragePrincipal() : nullptr;
nsIPrincipal* GetPrincipal() const override {
return mWindow ? mWindow->GetPrincipal() : nullptr;
}
bool IsPrivateBrowsing() const override {
@ -4354,9 +4354,8 @@ Storage* nsGlobalWindowInner::GetSessionStorage(ErrorResult& aError) {
}
RefPtr<Storage> storage;
// No StoragePrincipal for sessions.
aError = storageManager->CreateStorage(this, principal, principal,
documentURI, IsPrivateBrowsing(),
aError = storageManager->CreateStorage(this, principal, documentURI,
IsPrivateBrowsing(),
getter_AddRefs(storage));
if (aError.Failed()) {
return nullptr;
@ -4407,7 +4406,7 @@ Storage* nsGlobalWindowInner::GetLocalStorage(ErrorResult& aError) {
if (access == nsContentUtils::StorageAccess::ePartitionedOrDeny) {
if (!mDoc) {
access = nsContentUtils::StorageAccess::eDeny;
} else if (!StaticPrefs::privacy_storagePrincipal_enabledForTrackers()) {
} else {
nsCOMPtr<nsIURI> uri;
Unused << mDoc->NodePrincipal()->GetURI(getter_AddRefs(uri));
static const char* kPrefName =
@ -4433,8 +4432,7 @@ Storage* nsGlobalWindowInner::GetLocalStorage(ErrorResult& aError) {
// tracker, we pass from the partitioned LocalStorage to the 'normal'
// LocalStorage. The previous data is lost and the 2 window.localStorage
// objects, before and after the permission granted, will be different.
if ((StaticPrefs::privacy_storagePrincipal_enabledForTrackers() ||
access != nsContentUtils::StorageAccess::ePartitionedOrDeny) &&
if (access != nsContentUtils::StorageAccess::ePartitionedOrDeny &&
(!mLocalStorage ||
mLocalStorage->Type() == Storage::ePartitionedLocalStorage)) {
RefPtr<Storage> storage;
@ -4464,14 +4462,8 @@ Storage* nsGlobalWindowInner::GetLocalStorage(ErrorResult& aError) {
return nullptr;
}
nsIPrincipal* storagePrincipal = GetEffectiveStoragePrincipal();
if (!storagePrincipal) {
aError.Throw(NS_ERROR_DOM_SECURITY_ERR);
return nullptr;
}
aError = storageManager->CreateStorage(this, principal, storagePrincipal,
documentURI, IsPrivateBrowsing(),
aError = storageManager->CreateStorage(this, principal, documentURI,
IsPrivateBrowsing(),
getter_AddRefs(storage));
}
@ -4491,20 +4483,11 @@ Storage* nsGlobalWindowInner::GetLocalStorage(ErrorResult& aError) {
return nullptr;
}
nsIPrincipal* storagePrincipal = GetEffectiveStoragePrincipal();
if (!storagePrincipal) {
aError.Throw(NS_ERROR_DOM_SECURITY_ERR);
return nullptr;
}
mLocalStorage =
new PartitionedLocalStorage(this, principal, storagePrincipal);
mLocalStorage = new PartitionedLocalStorage(this, principal);
}
MOZ_ASSERT_IF(
!StaticPrefs::privacy_storagePrincipal_enabledForTrackers(),
(access == nsContentUtils::StorageAccess::ePartitionedOrDeny) ==
(mLocalStorage->Type() == Storage::ePartitionedLocalStorage));
MOZ_ASSERT((access == nsContentUtils::StorageAccess::ePartitionedOrDeny) ==
(mLocalStorage->Type() == Storage::ePartitionedLocalStorage));
return mLocalStorage;
}
@ -4891,11 +4874,6 @@ void nsGlobalWindowInner::ObserveStorageNotification(
return;
}
nsIPrincipal* storagePrincipal = GetEffectiveStoragePrincipal();
if (!storagePrincipal) {
return;
}
bool fireMozStorageChanged = false;
nsAutoString eventType;
eventType.AssignLiteral("storage");
@ -4936,8 +4914,8 @@ void nsGlobalWindowInner::ObserveStorageNotification(
else {
MOZ_ASSERT(!NS_strcmp(aStorageType, u"localStorage"));
MOZ_DIAGNOSTIC_ASSERT(StorageUtils::PrincipalsEqual(aEvent->GetPrincipal(),
storagePrincipal));
MOZ_DIAGNOSTIC_ASSERT(
StorageUtils::PrincipalsEqual(aEvent->GetPrincipal(), principal));
fireMozStorageChanged =
mLocalStorage && mLocalStorage == aEvent->GetStorageArea();

View File

@ -39,8 +39,6 @@ interface nsIDOMStorageManager : nsISupports
* The parent window.
* @param aPrincipal
* Principal to bound storage to.
* @param aStoragePrincipal
* StoragePrincipal to bound storage to.
* @param aDocumentURI
* URL of the demanding document, used for DOM storage event only.
* @param aPrivate
@ -48,7 +46,6 @@ interface nsIDOMStorageManager : nsISupports
*/
Storage createStorage(in mozIDOMWindow aWindow,
in nsIPrincipal aPrincipal,
in nsIPrincipal aStoragePrincipal,
in AString aDocumentURI,
[optional] in bool aPrivate);
/**
@ -66,14 +63,11 @@ interface nsIDOMStorageManager : nsISupports
* The parent window.
* @param aPrincipal
* Principal to bound storage to.
* @param aStoragePrincipal
* StoragePrincipal to bound storage to.
* @param aPrivate
* Whether the demanding document is running in Private Browsing mode or not.
*/
Storage getStorage(in mozIDOMWindow aWindow,
in nsIPrincipal aPrincipal,
in nsIPrincipal aStoragePrincipal,
[optional] in bool aPrivate);
/**

View File

@ -39,7 +39,6 @@
#include "mozilla/ipc/PBackgroundSharedTypes.h"
#include "mozilla/Logging.h"
#include "mozilla/storage/Variant.h"
#include "mozilla/StoragePrincipalHelper.h"
#include "nsClassHashtable.h"
#include "nsDataHashtable.h"
#include "nsExceptionHandler.h"
@ -3381,7 +3380,6 @@ bool DeallocPBackgroundLSObserverParent(PBackgroundLSObserverParent* aActor) {
bool VerifyPrincipalInfo(const Maybe<ContentParentId>& aContentParentId,
const PrincipalInfo& aPrincipalInfo,
const PrincipalInfo& aStoragePrincipalInfo,
const Maybe<nsID>& aClientId) {
AssertIsOnBackgroundThread();
@ -3399,9 +3397,7 @@ bool VerifyPrincipalInfo(const Maybe<ContentParentId>& aContentParentId,
}
}
return StoragePrincipalHelper::
VerifyValidStoragePrincipalInfoForPrincipalInfo(aStoragePrincipalInfo,
aPrincipalInfo);
return true;
}
bool VerifyOriginKey(const nsACString& aOriginKey,
@ -3436,9 +3432,8 @@ bool VerifyRequestParams(const Maybe<ContentParentId>& aContentParentId,
const LSRequestCommonParams& params =
aParams.get_LSRequestPreloadDatastoreParams().commonParams();
if (NS_WARN_IF(
!VerifyPrincipalInfo(aContentParentId, params.principalInfo(),
params.storagePrincipalInfo(), Nothing()))) {
if (NS_WARN_IF(!VerifyPrincipalInfo(aContentParentId,
params.principalInfo(), Nothing()))) {
ASSERT_UNLESS_FUZZING();
return false;
}
@ -3457,9 +3452,9 @@ bool VerifyRequestParams(const Maybe<ContentParentId>& aContentParentId,
const LSRequestCommonParams& commonParams = params.commonParams();
if (NS_WARN_IF(!VerifyPrincipalInfo(
aContentParentId, commonParams.principalInfo(),
commonParams.storagePrincipalInfo(), params.clientId()))) {
if (NS_WARN_IF(!VerifyPrincipalInfo(aContentParentId,
commonParams.principalInfo(),
params.clientId()))) {
ASSERT_UNLESS_FUZZING();
return false;
}
@ -3477,8 +3472,7 @@ bool VerifyRequestParams(const Maybe<ContentParentId>& aContentParentId,
aParams.get_LSRequestPrepareObserverParams();
if (NS_WARN_IF(!VerifyPrincipalInfo(
aContentParentId, params.principalInfo(),
params.storagePrincipalInfo(), params.clientId()))) {
aContentParentId, params.principalInfo(), params.clientId()))) {
ASSERT_UNLESS_FUZZING();
return false;
}
@ -3599,9 +3593,8 @@ bool VerifyRequestParams(const Maybe<ContentParentId>& aContentParentId,
const LSSimpleRequestPreloadedParams& params =
aParams.get_LSSimpleRequestPreloadedParams();
if (NS_WARN_IF(
!VerifyPrincipalInfo(aContentParentId, params.principalInfo(),
params.storagePrincipalInfo(), Nothing()))) {
if (NS_WARN_IF(!VerifyPrincipalInfo(aContentParentId,
params.principalInfo(), Nothing()))) {
ASSERT_UNLESS_FUZZING();
return false;
}
@ -6611,16 +6604,15 @@ nsresult PrepareDatastoreOp::Open() {
return NS_ERROR_FAILURE;
}
const PrincipalInfo& storagePrincipalInfo = mParams.storagePrincipalInfo();
const PrincipalInfo& principalInfo = mParams.principalInfo();
if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
if (principalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
QuotaManager::GetInfoForChrome(&mSuffix, &mGroup, &mOrigin);
} else {
MOZ_ASSERT(storagePrincipalInfo.type() ==
PrincipalInfo::TContentPrincipalInfo);
MOZ_ASSERT(principalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
QuotaManager::GetInfoFromValidatedPrincipalInfo(
storagePrincipalInfo, &mSuffix, &mGroup, &mMainThreadOrigin);
principalInfo, &mSuffix, &mGroup, &mMainThreadOrigin);
}
mState = State::Nesting;
@ -6642,19 +6634,17 @@ nsresult PrepareDatastoreOp::CheckExistingOperations() {
return NS_ERROR_FAILURE;
}
const PrincipalInfo& storagePrincipalInfo = mParams.storagePrincipalInfo();
const PrincipalInfo& principalInfo = mParams.principalInfo();
nsCString originAttrSuffix;
uint32_t privateBrowsingId;
if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
if (principalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
privateBrowsingId = 0;
} else {
MOZ_ASSERT(storagePrincipalInfo.type() ==
PrincipalInfo::TContentPrincipalInfo);
MOZ_ASSERT(principalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
const ContentPrincipalInfo& info =
storagePrincipalInfo.get_ContentPrincipalInfo();
const ContentPrincipalInfo& info = principalInfo.get_ContentPrincipalInfo();
const OriginAttributes& attrs = info.attrs();
attrs.CreateSuffix(originAttrSuffix);
@ -7920,16 +7910,15 @@ nsresult PrepareObserverOp::Open() {
return NS_ERROR_FAILURE;
}
const PrincipalInfo& storagePrincipalInfo = mParams.storagePrincipalInfo();
const PrincipalInfo& principalInfo = mParams.principalInfo();
if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
if (principalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
QuotaManager::GetInfoForChrome(nullptr, nullptr, &mOrigin);
} else {
MOZ_ASSERT(storagePrincipalInfo.type() ==
PrincipalInfo::TContentPrincipalInfo);
MOZ_ASSERT(principalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
QuotaManager::GetInfoFromValidatedPrincipalInfo(storagePrincipalInfo,
nullptr, nullptr, &mOrigin);
QuotaManager::GetInfoFromValidatedPrincipalInfo(principalInfo, nullptr,
nullptr, &mOrigin);
}
mState = State::SendingReadyMessage;
@ -8062,16 +8051,15 @@ nsresult PreloadedOp::Open() {
return NS_ERROR_FAILURE;
}
const PrincipalInfo& storagePrincipalInfo = mParams.storagePrincipalInfo();
const PrincipalInfo& principalInfo = mParams.principalInfo();
if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
if (principalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
QuotaManager::GetInfoForChrome(nullptr, nullptr, &mOrigin);
} else {
MOZ_ASSERT(storagePrincipalInfo.type() ==
PrincipalInfo::TContentPrincipalInfo);
MOZ_ASSERT(principalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
QuotaManager::GetInfoFromValidatedPrincipalInfo(storagePrincipalInfo,
nullptr, nullptr, &mOrigin);
QuotaManager::GetInfoFromValidatedPrincipalInfo(principalInfo, nullptr,
nullptr, &mOrigin);
}
mState = State::SendingResults;
@ -8982,11 +8970,11 @@ nsresult QuotaClient::CreateArchivedOriginScope(
contentPrincipalInfo.attrs() = attrs;
contentPrincipalInfo.spec() = spec;
PrincipalInfo storagePrincipalInfo(contentPrincipalInfo);
PrincipalInfo principalInfo(contentPrincipalInfo);
nsCString originAttrSuffix;
nsCString originKey;
rv = GenerateOriginKey2(storagePrincipalInfo, originAttrSuffix, originKey);
rv = GenerateOriginKey2(principalInfo, originAttrSuffix, originKey);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
@ -9005,11 +8993,11 @@ nsresult QuotaClient::CreateArchivedOriginScope(
contentPrincipalInfo.attrs() = attrs;
contentPrincipalInfo.spec() = spec;
PrincipalInfo storagePrincipalInfo(contentPrincipalInfo);
PrincipalInfo principalInfo(contentPrincipalInfo);
nsCString originAttrSuffix;
nsCString originKey;
rv = GenerateOriginKey2(storagePrincipalInfo, originAttrSuffix, originKey);
rv = GenerateOriginKey2(principalInfo, originAttrSuffix, originKey);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}

View File

@ -195,9 +195,8 @@ class RequestHelper final : public Runnable, public LSRequestChildCallback {
} // namespace
LSObject::LSObject(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal)
: Storage(aWindow, aPrincipal, aStoragePrincipal),
LSObject::LSObject(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal)
: Storage(aWindow, aPrincipal),
mPrivateBrowsingId(0),
mInExplicitSnapshot(false) {
AssertIsOnOwningThread();
@ -245,7 +244,7 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
MOZ_ASSERT(aWindow);
MOZ_ASSERT(aStorage);
MOZ_ASSERT(NextGenLocalStorageEnabled());
MOZ_ASSERT(nsContentUtils::StorageAllowedForWindow(aWindow) !=
MOZ_ASSERT(nsContentUtils::StorageAllowedForWindow(aWindow) >
nsContentUtils::StorageAccess::eDeny);
nsCOMPtr<nsIScriptObjectPrincipal> sop = do_QueryInterface(aWindow);
@ -256,11 +255,6 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIPrincipal> storagePrincipal = sop->GetEffectiveStoragePrincipal();
if (NS_WARN_IF(!storagePrincipal)) {
return NS_ERROR_FAILURE;
}
if (nsContentUtils::IsSystemPrincipal(principal)) {
return NS_ERROR_NOT_AVAILABLE;
}
@ -270,8 +264,7 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
// for the check.
nsCString originAttrSuffix;
nsCString originKey;
nsresult rv =
GenerateOriginKey(storagePrincipal, originAttrSuffix, originKey);
nsresult rv = GenerateOriginKey(principal, originAttrSuffix, originKey);
if (NS_FAILED(rv)) {
return NS_ERROR_NOT_AVAILABLE;
}
@ -284,23 +277,13 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
MOZ_ASSERT(principalInfo->type() == PrincipalInfo::TContentPrincipalInfo);
nsAutoPtr<PrincipalInfo> storagePrincipalInfo(new PrincipalInfo());
rv = PrincipalToPrincipalInfo(storagePrincipal, storagePrincipalInfo);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
MOZ_ASSERT(storagePrincipalInfo->type() ==
PrincipalInfo::TContentPrincipalInfo);
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(*storagePrincipalInfo))) {
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(*principalInfo))) {
return NS_ERROR_FAILURE;
}
nsCString suffix;
nsCString origin;
rv = QuotaManager::GetInfoFromPrincipal(storagePrincipal, &suffix, nullptr,
&origin);
rv = QuotaManager::GetInfoFromPrincipal(principal, &suffix, nullptr, &origin);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
@ -308,7 +291,7 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
MOZ_ASSERT(originAttrSuffix == suffix);
uint32_t privateBrowsingId;
rv = storagePrincipal->GetPrivateBrowsingId(&privateBrowsingId);
rv = principal->GetPrivateBrowsingId(&privateBrowsingId);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
@ -328,9 +311,8 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
}
}
RefPtr<LSObject> object = new LSObject(aWindow, principal, storagePrincipal);
RefPtr<LSObject> object = new LSObject(aWindow, principal);
object->mPrincipalInfo = std::move(principalInfo);
object->mStoragePrincipalInfo = std::move(storagePrincipalInfo);
object->mPrivateBrowsingId = privateBrowsingId;
object->mClientId = clientId;
object->mOrigin = origin;
@ -344,18 +326,15 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
// static
nsresult LSObject::CreateForPrincipal(nsPIDOMWindowInner* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
const nsAString& aDocumentURI,
bool aPrivate, LSObject** aObject) {
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aPrincipal);
MOZ_ASSERT(aStoragePrincipal);
MOZ_ASSERT(aObject);
nsCString originAttrSuffix;
nsCString originKey;
nsresult rv =
GenerateOriginKey(aStoragePrincipal, originAttrSuffix, originKey);
nsresult rv = GenerateOriginKey(aPrincipal, originAttrSuffix, originKey);
if (NS_FAILED(rv)) {
return NS_ERROR_NOT_AVAILABLE;
}
@ -369,24 +348,14 @@ nsresult LSObject::CreateForPrincipal(nsPIDOMWindowInner* aWindow,
MOZ_ASSERT(principalInfo->type() == PrincipalInfo::TContentPrincipalInfo ||
principalInfo->type() == PrincipalInfo::TSystemPrincipalInfo);
nsAutoPtr<PrincipalInfo> storagePrincipalInfo(new PrincipalInfo());
rv = PrincipalToPrincipalInfo(aStoragePrincipal, storagePrincipalInfo);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
MOZ_ASSERT(
storagePrincipalInfo->type() == PrincipalInfo::TContentPrincipalInfo ||
storagePrincipalInfo->type() == PrincipalInfo::TSystemPrincipalInfo);
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(*storagePrincipalInfo))) {
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(*principalInfo))) {
return NS_ERROR_FAILURE;
}
nsCString suffix;
nsCString origin;
if (storagePrincipalInfo->type() == PrincipalInfo::TSystemPrincipalInfo) {
if (principalInfo->type() == PrincipalInfo::TSystemPrincipalInfo) {
QuotaManager::GetInfoForChrome(&suffix, nullptr, &origin);
} else {
rv = QuotaManager::GetInfoFromPrincipal(aPrincipal, &suffix, nullptr,
@ -408,10 +377,8 @@ nsresult LSObject::CreateForPrincipal(nsPIDOMWindowInner* aWindow,
clientId = Some(clientInfo.ref().Id());
}
RefPtr<LSObject> object =
new LSObject(aWindow, aPrincipal, aStoragePrincipal);
RefPtr<LSObject> object = new LSObject(aWindow, aPrincipal);
object->mPrincipalInfo = std::move(principalInfo);
object->mStoragePrincipalInfo = std::move(storagePrincipalInfo);
object->mPrivateBrowsingId = aPrivate ? 1 : 0;
object->mClientId = clientId;
object->mOrigin = origin;
@ -844,7 +811,6 @@ nsresult LSObject::EnsureDatabase() {
LSRequestCommonParams commonParams;
commonParams.principalInfo() = *mPrincipalInfo;
commonParams.storagePrincipalInfo() = *mStoragePrincipalInfo;
commonParams.originKey() = mOriginKey;
LSRequestPrepareDatastoreParams params;
@ -878,7 +844,7 @@ nsresult LSObject::EnsureDatabase() {
LSDatabaseChild* actor = new LSDatabaseChild(database);
MOZ_ALWAYS_TRUE(backgroundActor->SendPBackgroundLSDatabaseConstructor(
actor, *mStoragePrincipalInfo, mPrivateBrowsingId, datastoreId));
actor, *mPrincipalInfo, mPrivateBrowsingId, datastoreId));
database->SetActor(actor);
@ -913,7 +879,6 @@ nsresult LSObject::EnsureObserver() {
LSRequestPrepareObserverParams params;
params.principalInfo() = *mPrincipalInfo;
params.storagePrincipalInfo() = *mStoragePrincipalInfo;
params.clientId() = mClientId;
LSRequestResponse response;
@ -967,8 +932,8 @@ void LSObject::OnChange(const nsAString& aKey, const nsAString& aOldValue,
const nsAString& aNewValue) {
AssertIsOnOwningThread();
NotifyChange(/* aStorage */ this, StoragePrincipal(), aKey, aOldValue,
aNewValue, /* aStorageType */ kLocalStorageType, mDocumentURI,
NotifyChange(/* aStorage */ this, Principal(), aKey, aOldValue, aNewValue,
/* aStorageType */ kLocalStorageType, mDocumentURI,
/* aIsPrivate */ !!mPrivateBrowsingId,
/* aImmediateDispatch */ false);
}

View File

@ -61,7 +61,6 @@ class LSObject final : public Storage {
friend nsGlobalWindowInner;
nsAutoPtr<PrincipalInfo> mPrincipalInfo;
nsAutoPtr<PrincipalInfo> mStoragePrincipalInfo;
RefPtr<LSDatabase> mDatabase;
RefPtr<LSObserver> mObserver;
@ -93,7 +92,6 @@ class LSObject final : public Storage {
*/
static nsresult CreateForPrincipal(nsPIDOMWindowInner* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
const nsAString& aDocumentURI,
bool aPrivate, LSObject** aObject);
@ -179,8 +177,7 @@ class LSObject final : public Storage {
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(LSObject, Storage)
private:
LSObject(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal);
LSObject(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal);
~LSObject();

View File

@ -191,19 +191,16 @@ LocalStorageManager2::PrecacheStorage(nsIPrincipal* aPrincipal,
NS_IMETHODIMP
LocalStorageManager2::CreateStorage(mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
const nsAString& aDocumentURI,
bool aPrivate, Storage** _retval) {
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aPrincipal);
MOZ_ASSERT(aStoragePrincipal);
MOZ_ASSERT(_retval);
nsCOMPtr<nsPIDOMWindowInner> inner = nsPIDOMWindowInner::From(aWindow);
RefPtr<LSObject> object;
nsresult rv = LSObject::CreateForPrincipal(inner, aPrincipal,
aStoragePrincipal, aDocumentURI,
nsresult rv = LSObject::CreateForPrincipal(inner, aPrincipal, aDocumentURI,
aPrivate, getter_AddRefs(object));
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
@ -215,12 +212,10 @@ LocalStorageManager2::CreateStorage(mozIDOMWindow* aWindow,
NS_IMETHODIMP
LocalStorageManager2::GetStorage(mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal, bool aPrivate,
nsIPrincipal* aPrincipal, bool aPrivate,
Storage** _retval) {
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aPrincipal);
MOZ_ASSERT(aStoragePrincipal);
MOZ_ASSERT(_retval);
return NS_ERROR_NOT_IMPLEMENTED;
@ -288,7 +283,6 @@ LocalStorageManager2::Preload(nsIPrincipal* aPrincipal, JSContext* aContext,
LSRequestCommonParams commonParams;
commonParams.principalInfo() = *principalInfo;
commonParams.storagePrincipalInfo() = *principalInfo;
commonParams.originKey() = originKey;
LSRequestPreloadDatastoreParams params(commonParams);

View File

@ -16,7 +16,6 @@ namespace dom {
struct LSRequestCommonParams
{
PrincipalInfo principalInfo;
PrincipalInfo storagePrincipalInfo;
nsCString originKey;
};
@ -34,7 +33,6 @@ struct LSRequestPrepareDatastoreParams
struct LSRequestPrepareObserverParams
{
PrincipalInfo principalInfo;
PrincipalInfo storagePrincipalInfo;
nsID? clientId;
};
@ -48,7 +46,6 @@ union LSRequestParams
struct LSSimpleRequestPreloadedParams
{
PrincipalInfo principalInfo;
PrincipalInfo storagePrincipalInfo;
};
union LSSimpleRequestParams

View File

@ -54,9 +54,8 @@ LocalStorage::LocalStorage(nsPIDOMWindowInner* aWindow,
LocalStorageManager* aManager,
LocalStorageCache* aCache,
const nsAString& aDocumentURI,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal, bool aIsPrivate)
: Storage(aWindow, aPrincipal, aStoragePrincipal),
nsIPrincipal* aPrincipal, bool aIsPrivate)
: Storage(aWindow, aPrincipal),
mManager(aManager),
mCache(aCache),
mDocumentURI(aDocumentURI),
@ -164,9 +163,9 @@ void LocalStorage::Clear(nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv) {
void LocalStorage::OnChange(const nsAString& aKey, const nsAString& aOldValue,
const nsAString& aNewValue) {
NotifyChange(/* aStorage */ this, StoragePrincipal(), aKey, aOldValue,
aNewValue, /* aStorageType */ u"localStorage", mDocumentURI,
mIsPrivate, /* aImmediateDispatch */ false);
NotifyChange(/* aStorage */ this, Principal(), aKey, aOldValue, aNewValue,
/* aStorageType */ u"localStorage", mDocumentURI, mIsPrivate,
/* aImmediateDispatch */ false);
}
void LocalStorage::ApplyEvent(StorageEvent* aStorageEvent) {

View File

@ -32,8 +32,7 @@ class LocalStorage final : public Storage, public nsSupportsWeakReference {
LocalStorage(nsPIDOMWindowInner* aWindow, LocalStorageManager* aManager,
LocalStorageCache* aCache, const nsAString& aDocumentURI,
nsIPrincipal* aPrincipal, nsIPrincipal* aStoragePrincipal,
bool aIsPrivate);
nsIPrincipal* aPrincipal, bool aIsPrivate);
bool IsForkOf(const Storage* aOther) const override;

View File

@ -198,8 +198,7 @@ void LocalStorageManager::DropCache(LocalStorageCache* aCache) {
nsresult LocalStorageManager::GetStorageInternal(
CreateMode aCreateMode, mozIDOMWindow* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal, const nsAString& aDocumentURI,
bool aPrivate, Storage** aRetval) {
const nsAString& aDocumentURI, bool aPrivate, Storage** aRetval) {
nsAutoCString originAttrSuffix;
nsAutoCString originKey;
@ -271,9 +270,8 @@ nsresult LocalStorageManager::GetStorageInternal(
if (aRetval) {
nsCOMPtr<nsPIDOMWindowInner> inner = nsPIDOMWindowInner::From(aWindow);
RefPtr<Storage> storage =
new LocalStorage(inner, this, cache, aDocumentURI, aPrincipal,
aStoragePrincipal, aPrivate);
RefPtr<Storage> storage = new LocalStorage(inner, this, cache, aDocumentURI,
aPrincipal, aPrivate);
storage.forget(aRetval);
}
@ -284,28 +282,24 @@ NS_IMETHODIMP
LocalStorageManager::PrecacheStorage(nsIPrincipal* aPrincipal,
Storage** aRetval) {
return GetStorageInternal(CreateMode::CreateIfShouldPreload, nullptr,
aPrincipal, aPrincipal, EmptyString(), false,
aRetval);
aPrincipal, EmptyString(), false, aRetval);
}
NS_IMETHODIMP
LocalStorageManager::CreateStorage(mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
const nsAString& aDocumentURI, bool aPrivate,
Storage** aRetval) {
return GetStorageInternal(CreateMode::CreateAlways, aWindow, aPrincipal,
aStoragePrincipal, aDocumentURI, aPrivate, aRetval);
aDocumentURI, aPrivate, aRetval);
}
NS_IMETHODIMP
LocalStorageManager::GetStorage(mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal, bool aPrivate,
nsIPrincipal* aPrincipal, bool aPrivate,
Storage** aRetval) {
return GetStorageInternal(CreateMode::UseIfExistsNeverCreate, aWindow,
aPrincipal, aStoragePrincipal, EmptyString(),
aPrivate, aRetval);
aPrincipal, EmptyString(), aPrivate, aRetval);
}
NS_IMETHODIMP

View File

@ -101,7 +101,6 @@ class LocalStorageManager final : public nsIDOMStorageManager,
// Helper for creation of DOM storage objects
nsresult GetStorageInternal(CreateMode aCreate, mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
const nsAString& aDocumentURI, bool aPrivate,
Storage** aRetval);

View File

@ -20,11 +20,9 @@ NS_INTERFACE_MAP_END_INHERITING(Storage)
NS_IMPL_ADDREF_INHERITED(PartitionedLocalStorage, Storage)
NS_IMPL_RELEASE_INHERITED(PartitionedLocalStorage, Storage)
PartitionedLocalStorage::PartitionedLocalStorage(
nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal)
: Storage(aWindow, aPrincipal, aStoragePrincipal),
mCache(new SessionStorageCache()) {}
PartitionedLocalStorage::PartitionedLocalStorage(nsPIDOMWindowInner* aWindow,
nsIPrincipal* aPrincipal)
: Storage(aWindow, aPrincipal), mCache(new SessionStorageCache()) {}
PartitionedLocalStorage::~PartitionedLocalStorage() {}

View File

@ -24,8 +24,8 @@ class PartitionedLocalStorage final : public Storage {
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(PartitionedLocalStorage, Storage)
PartitionedLocalStorage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal);
PartitionedLocalStorage(nsPIDOMWindowInner* aWindow,
nsIPrincipal* aPrincipal);
StorageType Type() const override { return ePartitionedLocalStorage; }

View File

@ -35,7 +35,7 @@ SessionStorage::SessionStorage(nsPIDOMWindowInner* aWindow,
SessionStorageCache* aCache,
SessionStorageManager* aManager,
const nsAString& aDocumentURI, bool aIsPrivate)
: Storage(aWindow, aPrincipal, aPrincipal),
: Storage(aWindow, aPrincipal),
mCache(aCache),
mManager(aManager),
mDocumentURI(aDocumentURI),
@ -46,7 +46,6 @@ SessionStorage::SessionStorage(nsPIDOMWindowInner* aWindow,
SessionStorage::~SessionStorage() {}
already_AddRefed<SessionStorage> SessionStorage::Clone() const {
MOZ_ASSERT(Principal() == StoragePrincipal());
RefPtr<SessionStorage> storage =
new SessionStorage(GetParentObject(), Principal(), mCache, mManager,
mDocumentURI, mIsPrivate);

View File

@ -71,7 +71,6 @@ SessionStorageManager::PrecacheStorage(nsIPrincipal* aPrincipal,
NS_IMETHODIMP
SessionStorageManager::CreateStorage(mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
const nsAString& aDocumentURI,
bool aPrivate, Storage** aRetval) {
nsAutoCString originKey;
@ -95,7 +94,6 @@ SessionStorageManager::CreateStorage(mozIDOMWindow* aWindow,
nsCOMPtr<nsPIDOMWindowInner> inner = nsPIDOMWindowInner::From(aWindow);
// No StoragePrincipal for sessionStorage.
RefPtr<SessionStorage> storage = new SessionStorage(
inner, aPrincipal, cache, this, aDocumentURI, aPrivate);
@ -105,9 +103,8 @@ SessionStorageManager::CreateStorage(mozIDOMWindow* aWindow,
NS_IMETHODIMP
SessionStorageManager::GetStorage(mozIDOMWindow* aWindow,
nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal,
bool aPrivate, Storage** aRetval) {
nsIPrincipal* aPrincipal, bool aPrivate,
Storage** aRetval) {
*aRetval = nullptr;
nsAutoCString originKey;

View File

@ -16,8 +16,7 @@ namespace dom {
static const char kStorageEnabled[] = "dom.storage.enabled";
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Storage, mWindow, mPrincipal,
mStoragePrincipal)
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Storage, mWindow, mPrincipal)
NS_IMPL_CYCLE_COLLECTING_ADDREF(Storage)
NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_LAST_RELEASE(Storage, LastRelease())
@ -27,12 +26,8 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Storage)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
Storage::Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal)
: mWindow(aWindow),
mPrincipal(aPrincipal),
mStoragePrincipal(aStoragePrincipal),
mIsSessionOnly(false) {
Storage::Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal)
: mWindow(aWindow), mPrincipal(aPrincipal), mIsSessionOnly(false) {
MOZ_ASSERT(aPrincipal);
if (nsContentUtils::IsSystemPrincipal(mPrincipal)) {
@ -50,7 +45,7 @@ Storage::Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
}
}
Storage::~Storage() = default;
Storage::~Storage() {}
/* static */
bool Storage::StoragePrefIsEnabled() {

View File

@ -26,8 +26,7 @@ class Storage : public nsISupports, public nsWrapperCache {
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Storage)
Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal,
nsIPrincipal* aStoragePrincipal);
Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal);
static bool StoragePrefIsEnabled();
@ -45,8 +44,6 @@ class Storage : public nsISupports, public nsWrapperCache {
nsIPrincipal* Principal() const { return mPrincipal; }
nsIPrincipal* StoragePrincipal() const { return mStoragePrincipal; }
// WebIDL
JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
@ -144,7 +141,6 @@ class Storage : public nsISupports, public nsWrapperCache {
private:
nsCOMPtr<nsPIDOMWindowInner> mWindow;
nsCOMPtr<nsIPrincipal> mPrincipal;
nsCOMPtr<nsIPrincipal> mStoragePrincipal;
// Whether storage is set to persist data only per session, may change
// dynamically and is set by CanUseStorage function that is called

View File

@ -76,7 +76,7 @@ void StorageNotifierService::Broadcast(StorageEvent* aEvent,
// No reasons to continue if the principal of the event doesn't match with
// the window's one.
if (!StorageUtils::PrincipalsEqual(aEvent->GetPrincipal(),
observer->GetEffectiveStoragePrincipal())) {
observer->GetPrincipal())) {
continue;
}

View File

@ -31,7 +31,7 @@ class StorageNotificationObserver {
virtual bool IsPrivateBrowsing() const = 0;
virtual nsIPrincipal* GetEffectiveStoragePrincipal() const = 0;
virtual nsIPrincipal* GetPrincipal() const = 0;
virtual nsIEventTarget* GetEventTarget() const = 0;
};

View File

@ -107,7 +107,7 @@ async function verifyTabPreload(knownTab, expectStorageExists) {
if (Services.lsm.nextGenLocalStorageEnabled) {
return Services.lsm.isPreloaded(principal);
}
return !!Services.domStorageManager.getStorage(null, principal, principal);
return !!Services.domStorageManager.getStorage(null, principal);
});
is(storageExists, expectStorageExists, "Storage existence === preload");
}

View File

@ -6,7 +6,6 @@
#include "StoragePrincipalHelper.h"
#include "mozilla/ipc/PBackgroundSharedTypes.h"
#include "mozilla/ScopeExit.h"
#include "mozilla/StaticPrefs.h"
#include "nsContentUtils.h"
@ -98,88 +97,4 @@ nsresult StoragePrincipalHelper::PrepareOriginAttributes(
return NS_OK;
}
// static
bool StoragePrincipalHelper::VerifyValidStoragePrincipalInfoForPrincipalInfo(
const mozilla::ipc::PrincipalInfo& aStoragePrincipalInfo,
const mozilla::ipc::PrincipalInfo& aPrincipalInfo) {
if (aStoragePrincipalInfo.type() != aPrincipalInfo.type()) {
return false;
}
if (aStoragePrincipalInfo.type() ==
mozilla::ipc::PrincipalInfo::TContentPrincipalInfo) {
const mozilla::ipc::ContentPrincipalInfo& spInfo =
aStoragePrincipalInfo.get_ContentPrincipalInfo();
const mozilla::ipc::ContentPrincipalInfo& pInfo =
aPrincipalInfo.get_ContentPrincipalInfo();
if (!spInfo.attrs().EqualsIgnoringFPD(pInfo.attrs()) ||
spInfo.originNoSuffix() != pInfo.originNoSuffix() ||
spInfo.spec() != pInfo.spec() || spInfo.domain() != pInfo.domain() ||
spInfo.baseDomain() != pInfo.baseDomain() ||
spInfo.securityPolicies().Length() !=
pInfo.securityPolicies().Length()) {
return false;
}
for (uint32_t i = 0; i < spInfo.securityPolicies().Length(); ++i) {
if (spInfo.securityPolicies()[i].policy() !=
pInfo.securityPolicies()[i].policy() ||
spInfo.securityPolicies()[i].reportOnlyFlag() !=
pInfo.securityPolicies()[i].reportOnlyFlag() ||
spInfo.securityPolicies()[i].deliveredViaMetaTagFlag() !=
pInfo.securityPolicies()[i].deliveredViaMetaTagFlag()) {
return false;
}
}
return true;
}
if (aStoragePrincipalInfo.type() ==
mozilla::ipc::PrincipalInfo::TSystemPrincipalInfo) {
// Nothing to check here.
return true;
}
if (aStoragePrincipalInfo.type() ==
mozilla::ipc::PrincipalInfo::TNullPrincipalInfo) {
const mozilla::ipc::NullPrincipalInfo& spInfo =
aStoragePrincipalInfo.get_NullPrincipalInfo();
const mozilla::ipc::NullPrincipalInfo& pInfo =
aPrincipalInfo.get_NullPrincipalInfo();
return spInfo.spec() == pInfo.spec() &&
spInfo.attrs().EqualsIgnoringFPD(pInfo.attrs());
}
if (aStoragePrincipalInfo.type() ==
mozilla::ipc::PrincipalInfo::TExpandedPrincipalInfo) {
const mozilla::ipc::ExpandedPrincipalInfo& spInfo =
aStoragePrincipalInfo.get_ExpandedPrincipalInfo();
const mozilla::ipc::ExpandedPrincipalInfo& pInfo =
aPrincipalInfo.get_ExpandedPrincipalInfo();
if (!spInfo.attrs().EqualsIgnoringFPD(pInfo.attrs())) {
return false;
}
if (spInfo.allowlist().Length() != pInfo.allowlist().Length()) {
return false;
}
for (uint32_t i = 0; i < spInfo.allowlist().Length(); ++i) {
if (!VerifyValidStoragePrincipalInfoForPrincipalInfo(
spInfo.allowlist()[i], pInfo.allowlist()[i])) {
return false;
}
}
return true;
}
MOZ_CRASH("Invalid principalInfo type");
return false;
}
} // namespace mozilla

View File

@ -121,10 +121,6 @@ class nsIPrincipal;
namespace mozilla {
namespace ipc {
class PrincipalInfo;
}
class OriginAttributes;
class StoragePrincipalHelper final {
@ -134,10 +130,6 @@ class StoragePrincipalHelper final {
static nsresult PrepareOriginAttributes(nsIChannel* aChannel,
OriginAttributes& aOriginAttributes);
static bool VerifyValidStoragePrincipalInfoForPrincipalInfo(
const mozilla::ipc::PrincipalInfo& aStoragePrincipalInfo,
const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
};
} // namespace mozilla

View File

@ -272,7 +272,7 @@ var UninstallObserver = {
// the old API.
if (!Services.lsm.nextGenLocalStorageEnabled) {
// Clear localStorage created by the extension
let storage = Services.domStorageManager.getStorage(null, principal, storagePrincipal);
let storage = Services.domStorageManager.getStorage(null, principal);
if (storage) {
storage.clear();
}

View File

@ -1018,17 +1018,11 @@ static void ReadAllEntriesFromStorage(
if (!doc) {
return;
}
nsCOMPtr<nsIPrincipal> principal = doc->NodePrincipal();
if (!principal) {
return;
}
nsCOMPtr<nsIPrincipal> storagePrincipal = doc->EffectiveStoragePrincipal();
if (!storagePrincipal) {
return;
}
nsAutoCString origin;
nsresult rv = principal->GetOrigin(origin);
if (NS_FAILED(rv) || aVisitedOrigins.Contains(origin)) {
@ -1042,8 +1036,8 @@ static void ReadAllEntriesFromStorage(
return;
}
RefPtr<Storage> storage;
storageManager->GetStorage(aWindow->GetCurrentInnerWindow(), principal,
storagePrincipal, false, getter_AddRefs(storage));
storageManager->GetStorage(aWindow->GetCurrentInnerWindow(), principal, false,
getter_AddRefs(storage));
if (!storage) {
return;
}
@ -1171,8 +1165,8 @@ void SessionStoreUtils::RestoreSessionStorage(
// followup bug to bug 600307.
// Null window because the current window doesn't match the principal yet
// and loads about:blank.
storageManager->CreateStorage(nullptr, principal, principal, EmptyString(),
false, getter_AddRefs(storage));
storageManager->CreateStorage(nullptr, principal, EmptyString(), false,
getter_AddRefs(storage));
if (!storage) {
continue;
}

View File

@ -1184,9 +1184,9 @@ nsresult nsWindowWatcher::OpenWindowInternal(
RefPtr<Storage> storage;
nsCOMPtr<nsPIDOMWindowInner> pInnerWin =
parentWindow->GetCurrentInnerWindow();
parentStorageManager->GetStorage(
pInnerWin, subjectPrincipal, subjectPrincipal,
isPrivateBrowsingWindow, getter_AddRefs(storage));
parentStorageManager->GetStorage(pInnerWin, subjectPrincipal,
isPrivateBrowsingWindow,
getter_AddRefs(storage));
if (storage) {
newStorageManager->CloneStorage(storage);
}