mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
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:
parent
f103a392a0
commit
f1dd75ca22
@ -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();
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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() {}
|
||||
|
||||
|
@ -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; }
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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() {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user