Bug 1195930 - Part 8: Fixed support for origin clearing, reworked internal origin patterns to use OriginAttributesPattern; r=asuth

This commit is contained in:
Jan Varga 2016-06-05 21:42:48 +02:00
Родитель 1fb4d91a67
Коммит af49dba19e
9 изменённых файлов: 263 добавлений и 232 удалений

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

@ -186,6 +186,42 @@ public:
return true;
}
bool Overlaps(const OriginAttributesPattern& aOther) const
{
if (mAppId.WasPassed() && aOther.mAppId.WasPassed() &&
mAppId.Value() != aOther.mAppId.Value()) {
return false;
}
if (mInIsolatedMozBrowser.WasPassed() &&
aOther.mInIsolatedMozBrowser.WasPassed() &&
mInIsolatedMozBrowser.Value() != aOther.mInIsolatedMozBrowser.Value()) {
return false;
}
if (mAddonId.WasPassed() && aOther.mAddonId.WasPassed() &&
mAddonId.Value() != aOther.mAddonId.Value()) {
return false;
}
if (mUserContextId.WasPassed() && aOther.mUserContextId.WasPassed() &&
mUserContextId.Value() != aOther.mUserContextId.Value()) {
return false;
}
if (mSignedPkg.WasPassed() && aOther.mSignedPkg.WasPassed() &&
mSignedPkg.Value() != aOther.mSignedPkg.Value()) {
return false;
}
if (mPrivateBrowsingId.WasPassed() && aOther.mPrivateBrowsingId.WasPassed() &&
mPrivateBrowsingId.Value() != aOther.mPrivateBrowsingId.Value()) {
return false;
}
return true;
}
};
/*

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

@ -250,7 +250,7 @@ QuotaRequestChild::Recv__delete__(const RequestResponse& aResponse)
break;
case RequestResponse::TClearOriginResponse:
case RequestResponse::TClearAppResponse:
case RequestResponse::TClearOriginsResponse:
case RequestResponse::TClearAllResponse:
case RequestResponse::TResetAllResponse:
HandleResponse();

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

@ -347,10 +347,6 @@ public:
bool aInternal,
OpenDirectoryListener* aOpenListener);
static bool
MatchOriginScopes(const OriginScope& aOriginScope1,
const OriginScope& aOriginScope2);
void
AssertIsOnOwningThread() const
#ifdef DEBUG
@ -1220,7 +1216,7 @@ class OriginClearOp final
: public QuotaRequestBase
{
const RequestParams mParams;
const bool mApp;
const bool mMultiple;
public:
explicit OriginClearOp(const RequestParams& aParams);
@ -1289,14 +1285,6 @@ AssertNoUnderflow(T aDest, U aArg)
MOZ_ASSERT(uint64_t(aDest) >= uint64_t(aArg));
}
bool
PatternMatchesOrigin(const nsACString& aPatternString,
const nsACString& aOrigin)
{
// Aren't we smart!
return StringBeginsWith(aOrigin, aPatternString);
}
} // namespace
BackgroundThreadObject::BackgroundThreadObject()
@ -2223,13 +2211,12 @@ DirectoryLockImpl::DirectoryLockImpl(QuotaManager* aQuotaManager,
{
AssertIsOnOwningThread();
MOZ_ASSERT(aQuotaManager);
MOZ_ASSERT_IF(aOriginScope.IsOrigin(), !aOriginScope.GetOrigin().IsEmpty());
MOZ_ASSERT_IF(!aInternal, !aPersistenceType.IsNull());
MOZ_ASSERT_IF(!aInternal,
aPersistenceType.Value() != PERSISTENCE_TYPE_INVALID);
MOZ_ASSERT_IF(!aInternal, !aGroup.IsEmpty());
MOZ_ASSERT_IF(aInternal, !aOriginScope.IsEmpty() || aOriginScope.IsNull());
MOZ_ASSERT_IF(!aInternal, aOriginScope.IsOrigin());
MOZ_ASSERT_IF(!aInternal, !aOriginScope.IsEmpty());
MOZ_ASSERT_IF(!aInternal, !aIsApp.IsNull());
MOZ_ASSERT_IF(!aInternal, !aClientType.IsNull());
MOZ_ASSERT_IF(!aInternal, aClientType.Value() != Client::TYPE_MAX);
@ -2250,33 +2237,6 @@ DirectoryLockImpl::~DirectoryLockImpl()
mQuotaManager->UnregisterDirectoryLock(this);
}
// static
bool
DirectoryLockImpl::MatchOriginScopes(const OriginScope& aOriginScope1,
const OriginScope& aOriginScope2)
{
AssertIsOnBackgroundThread();
bool match;
if (aOriginScope2.IsNull() || aOriginScope1.IsNull()) {
match = true;
} else if (aOriginScope2.IsOrigin()) {
if (aOriginScope1.IsOrigin()) {
match = aOriginScope2.Equals(aOriginScope1);
} else {
match = PatternMatchesOrigin(aOriginScope1, aOriginScope2);
}
} else if (aOriginScope1.IsOrigin()) {
match = PatternMatchesOrigin(aOriginScope2, aOriginScope1);
} else {
match = PatternMatchesOrigin(aOriginScope1, aOriginScope2) ||
PatternMatchesOrigin(aOriginScope2, aOriginScope1);
}
return match;
}
#ifdef DEBUG
void
@ -2305,7 +2265,7 @@ DirectoryLockImpl::MustWaitFor(const DirectoryLockImpl& aExistingLock)
}
// If the origin scopes don't overlap, the op can proceed.
bool match = MatchOriginScopes(mOriginScope, aExistingLock.mOriginScope);
bool match = aExistingLock.mOriginScope.Matches(mOriginScope);
if (!match) {
return false;
}
@ -2737,10 +2697,10 @@ QuotaObject::MaybeUpdateSize(int64_t aSize, bool aTruncate)
for (RefPtr<DirectoryLockImpl>& lock : locks) {
MOZ_ASSERT(!lock->GetPersistenceType().IsNull());
MOZ_ASSERT(lock->GetOriginScope().IsOrigin());
MOZ_ASSERT(!lock->GetOriginScope().IsEmpty());
MOZ_ASSERT(!lock->GetOriginScope().GetOrigin().IsEmpty());
quotaManager->DeleteFilesForOrigin(lock->GetPersistenceType().Value(),
lock->GetOriginScope());
lock->GetOriginScope().GetOrigin());
}
}
@ -2752,14 +2712,14 @@ QuotaObject::MaybeUpdateSize(int64_t aSize, bool aTruncate)
MOZ_ASSERT(!lock->GetPersistenceType().IsNull());
MOZ_ASSERT(!lock->GetGroup().IsEmpty());
MOZ_ASSERT(lock->GetOriginScope().IsOrigin());
MOZ_ASSERT(!lock->GetOriginScope().IsEmpty());
MOZ_ASSERT(lock->GetOriginScope() != mOriginInfo->mOrigin,
MOZ_ASSERT(!lock->GetOriginScope().GetOrigin().IsEmpty());
MOZ_ASSERT(lock->GetOriginScope().GetOrigin() != mOriginInfo->mOrigin,
"Deleted itself!");
quotaManager->LockedRemoveQuotaForOrigin(
lock->GetPersistenceType().Value(),
lock->GetGroup(),
lock->GetOriginScope());
lock->GetOriginScope().GetOrigin());
}
// We unlocked and relocked several times so we need to recompute all the
@ -2925,13 +2885,12 @@ QuotaManager::CreateDirectoryLock(Nullable<PersistenceType> aPersistenceType,
-> already_AddRefed<DirectoryLockImpl>
{
AssertIsOnOwningThread();
MOZ_ASSERT_IF(aOriginScope.IsOrigin(), !aOriginScope.GetOrigin().IsEmpty());
MOZ_ASSERT_IF(!aInternal, !aPersistenceType.IsNull());
MOZ_ASSERT_IF(!aInternal,
aPersistenceType.Value() != PERSISTENCE_TYPE_INVALID);
MOZ_ASSERT_IF(!aInternal, !aGroup.IsEmpty());
MOZ_ASSERT_IF(aInternal, !aOriginScope.IsEmpty() || aOriginScope.IsNull());
MOZ_ASSERT_IF(!aInternal, aOriginScope.IsOrigin());
MOZ_ASSERT_IF(!aInternal, !aOriginScope.IsEmpty());
MOZ_ASSERT_IF(!aInternal, !aIsApp.IsNull());
MOZ_ASSERT_IF(!aInternal, !aClientType.IsNull());
MOZ_ASSERT_IF(!aInternal, aClientType.Value() != Client::TYPE_MAX);
@ -3020,20 +2979,20 @@ QuotaManager::RegisterDirectoryLock(DirectoryLockImpl* aLock)
MOZ_ASSERT(!persistenceType.IsNull());
MOZ_ASSERT(!aLock->GetGroup().IsEmpty());
MOZ_ASSERT(originScope.IsOrigin());
MOZ_ASSERT(!originScope.IsEmpty());
MOZ_ASSERT(!originScope.GetOrigin().IsEmpty());
DirectoryLockTable& directoryLockTable =
GetDirectoryLockTable(persistenceType.Value());
nsTArray<DirectoryLockImpl*>* array;
if (!directoryLockTable.Get(originScope, &array)) {
if (!directoryLockTable.Get(originScope.GetOrigin(), &array)) {
array = new nsTArray<DirectoryLockImpl*>();
directoryLockTable.Put(originScope, array);
directoryLockTable.Put(originScope.GetOrigin(), array);
if (!IsShuttingDown()) {
UpdateOriginAccessTime(persistenceType.Value(),
aLock->GetGroup(),
originScope);
originScope.GetOrigin());
}
}
array->AppendElement(aLock);
@ -3055,22 +3014,22 @@ QuotaManager::UnregisterDirectoryLock(DirectoryLockImpl* aLock)
MOZ_ASSERT(!persistenceType.IsNull());
MOZ_ASSERT(!aLock->GetGroup().IsEmpty());
MOZ_ASSERT(originScope.IsOrigin());
MOZ_ASSERT(!originScope.IsEmpty());
MOZ_ASSERT(!originScope.GetOrigin().IsEmpty());
DirectoryLockTable& directoryLockTable =
GetDirectoryLockTable(persistenceType.Value());
nsTArray<DirectoryLockImpl*>* array;
MOZ_ALWAYS_TRUE(directoryLockTable.Get(originScope, &array));
MOZ_ALWAYS_TRUE(directoryLockTable.Get(originScope.GetOrigin(), &array));
MOZ_ALWAYS_TRUE(array->RemoveElement(aLock));
if (array->IsEmpty()) {
directoryLockTable.Remove(originScope);
directoryLockTable.Remove(originScope.GetOrigin());
if (!IsShuttingDown()) {
UpdateOriginAccessTime(persistenceType.Value(),
aLock->GetGroup(),
originScope);
originScope.GetOrigin());
}
}
}
@ -3109,8 +3068,7 @@ QuotaManager::CollectOriginsForEviction(
bool match = false;
for (uint32_t j = aLocks.Length(); j > 0; j--) {
DirectoryLockImpl* lock = aLocks[j - 1];
if (DirectoryLockImpl::MatchOriginScopes(originScope,
lock->GetOriginScope())) {
if (originScope.Matches(lock->GetOriginScope())) {
match = true;
break;
}
@ -4451,13 +4409,13 @@ QuotaManager::OpenDirectoryInternal(Nullable<PersistenceType> aPersistenceType,
const OriginScope& originScope = blockedOnLock->GetOriginScope();
MOZ_ASSERT(originScope.IsOrigin());
MOZ_ASSERT(!originScope.IsEmpty());
MOZ_ASSERT(!originScope.GetOrigin().IsEmpty());
nsAutoPtr<nsTHashtable<nsCStringHashKey>>& origin = origins[clientType];
if (!origin) {
origin = new nsTHashtable<nsCStringHashKey>();
}
origin->PutEntry(originScope);
origin->PutEntry(originScope.GetOrigin());
}
}
@ -5147,48 +5105,6 @@ QuotaManager::FinalizeOriginEviction(
}
}
void
QuotaManager::GetOriginPatternString(uint32_t aAppId,
MozBrowserPatternFlag aBrowserFlag,
const nsACString& aOrigin,
nsAutoCString& _retval)
{
NS_ASSERTION(aAppId != kUnknownAppId, "Bad appId!");
NS_ASSERTION(aOrigin.IsEmpty() || aBrowserFlag != IgnoreMozBrowser,
"Bad args!");
if (aOrigin.IsEmpty()) {
_retval.Truncate();
_retval.AppendInt(aAppId);
_retval.Append('+');
if (aBrowserFlag != IgnoreMozBrowser) {
if (aBrowserFlag == MozBrowser) {
_retval.Append('t');
}
else {
_retval.Append('f');
}
_retval.Append('+');
}
return;
}
#ifdef DEBUG
if (aAppId != nsIScriptSecurityManager::NO_APP_ID ||
aBrowserFlag == MozBrowser) {
nsAutoCString pattern;
GetOriginPatternString(aAppId, aBrowserFlag, EmptyCString(), pattern);
NS_ASSERTION(PatternMatchesOrigin(pattern, aOrigin),
"Origin doesn't match parameters!");
}
#endif
_retval = aOrigin;
}
void
QuotaManager::ShutdownTimerCallback(nsITimer* aTimer, void* aClosure)
{
@ -5629,7 +5545,7 @@ FinalizeOriginEvictionOp::DoDirectoryWork(QuotaManager* aQuotaManager)
for (RefPtr<DirectoryLockImpl>& lock : mLocks) {
aQuotaManager->OriginClearCompleted(lock->GetPersistenceType().Value(),
lock->GetOriginScope(),
lock->GetOriginScope().GetOrigin(),
lock->GetIsApp().Value());
}
@ -5722,7 +5638,7 @@ SaveOriginAccessTimeOp::DoDirectoryWork(QuotaManager* aQuotaManager)
nsCOMPtr<nsIFile> directory;
nsresult rv =
aQuotaManager->GetDirectoryForOrigin(mPersistenceType.Value(),
mOriginScope,
mOriginScope.GetOrigin(),
getter_AddRefs(directory));
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
@ -5841,7 +5757,7 @@ Quota::AllocPQuotaRequestParent(const RequestParams& aParams)
AssertIsOnBackgroundThread();
MOZ_ASSERT(aParams.type() != RequestParams::T__None);
if (aParams.type() == RequestParams::TClearAppParams) {
if (aParams.type() == RequestParams::TClearOriginsParams) {
PBackgroundParent* actor = Manager();
MOZ_ASSERT(actor);
@ -5855,7 +5771,7 @@ Quota::AllocPQuotaRequestParent(const RequestParams& aParams)
switch (aParams.type()) {
case RequestParams::TClearOriginParams:
case RequestParams::TClearAppParams:
case RequestParams::TClearOriginsParams:
actor = new OriginClearOp(aParams);
break;
@ -6023,7 +5939,7 @@ GetUsageOp::AddToUsage(QuotaManager* aQuotaManager,
nsCOMPtr<nsIFile> directory;
nsresult rv = aQuotaManager->GetDirectoryForOrigin(aPersistenceType,
mOriginScope,
mOriginScope.GetOrigin(),
getter_AddRefs(directory));
NS_ENSURE_SUCCESS(rv, rv);
@ -6037,7 +5953,8 @@ GetUsageOp::AddToUsage(QuotaManager* aQuotaManager,
bool initialized;
if (IsTreatedAsPersistent(aPersistenceType, mIsApp)) {
nsCString originKey = OriginKey(aPersistenceType, mOriginScope);
nsCString originKey =
OriginKey(aPersistenceType, mOriginScope.GetOrigin());
initialized = aQuotaManager->IsOriginInitialized(originKey);
} else {
initialized = aQuotaManager->IsTemporaryStorageInitialized();
@ -6096,11 +6013,15 @@ GetUsageOp::AddToUsage(QuotaManager* aQuotaManager,
MOZ_ASSERT(client);
if (initialized) {
rv = client->GetUsageForOrigin(aPersistenceType, mGroup, mOriginScope,
rv = client->GetUsageForOrigin(aPersistenceType,
mGroup,
mOriginScope.GetOrigin(),
&mUsageInfo);
}
else {
rv = client->InitOrigin(aPersistenceType, mGroup, mOriginScope,
rv = client->InitOrigin(aPersistenceType,
mGroup,
mOriginScope.GetOrigin(),
&mUsageInfo);
}
NS_ENSURE_SUCCESS(rv, rv);
@ -6306,10 +6227,10 @@ ResetOrClearOp::GetResponse(RequestResponse& aResponse)
OriginClearOp::OriginClearOp(const RequestParams& aParams)
: QuotaRequestBase(/* aExclusive */ true)
, mParams(aParams)
, mApp(aParams.type() == RequestParams::TClearAppParams)
, mMultiple(aParams.type() == RequestParams::TClearOriginsParams)
{
MOZ_ASSERT(aParams.type() == RequestParams::TClearOriginParams ||
aParams.type() == RequestParams::TClearAppParams);
aParams.type() == RequestParams::TClearOriginsParams);
}
bool
@ -6322,16 +6243,7 @@ OriginClearOp::Init(Quota* aQuota)
return false;
}
if (mApp) {
const ClearAppParams& params = mParams.get_ClearAppParams();
nsAutoCString pattern;
QuotaManager::GetOriginPatternStringMaybeIgnoreBrowser(params.appId(),
params.browserOnly(),
pattern);
mOriginScope.SetFromPattern(pattern);
} else {
if (!mMultiple) {
const ClearOriginParams& params = mParams.get_ClearOriginParams();
if (params.persistenceTypeIsExplicit()) {
@ -6339,10 +6251,10 @@ OriginClearOp::Init(Quota* aQuota)
mPersistenceType.SetValue(params.persistenceType());
}
mNeedsMainThreadInit = true;
}
mNeedsMainThreadInit = true;
return true;
}
@ -6351,37 +6263,35 @@ OriginClearOp::DoInitOnMainThread()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(GetState() == State_Initializing);
MOZ_ASSERT(!mApp);
MOZ_ASSERT(mNeedsMainThreadInit);
const ClearOriginParams& params = mParams.get_ClearOriginParams();
if (mMultiple) {
const ClearOriginsParams& params = mParams.get_ClearOriginsParams();
const PrincipalInfo& principalInfo = params.principalInfo();
mOriginScope.SetFromJSONPattern(params.pattern());
} else {
const ClearOriginParams& params = mParams.get_ClearOriginParams();
nsresult rv;
nsCOMPtr<nsIPrincipal> principal =
PrincipalInfoToPrincipal(principalInfo, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
const PrincipalInfo& principalInfo = params.principalInfo();
nsresult rv;
nsCOMPtr<nsIPrincipal> principal =
PrincipalInfoToPrincipal(principalInfo, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
// Figure out which origin we're dealing with.
nsCString origin;
rv = QuotaManager::GetInfoFromPrincipal(principal, nullptr, nullptr, &origin,
nullptr);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
mOriginScope.SetFromOrigin(origin);
}
// Figure out which origin we're dealing with.
nsCString origin;
rv = QuotaManager::GetInfoFromPrincipal(principal, nullptr, nullptr, &origin,
nullptr);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
const mozilla::PrincipalOriginAttributes& attrs =
mozilla::BasePrincipal::Cast(principal)->OriginAttributesRef();
nsAutoCString pattern;
QuotaManager::GetOriginPatternString(attrs.mAppId, attrs.mInIsolatedMozBrowser, origin,
pattern);
mOriginScope.SetFromPattern(pattern);
return NS_OK;
}
@ -6411,8 +6321,12 @@ OriginClearOp::DeleteFiles(QuotaManager* aQuotaManager,
return;
}
nsCString originSanitized(mOriginScope);
SanitizeOriginString(originSanitized);
OriginScope originScope = mOriginScope.Clone();
if (originScope.IsOrigin()) {
nsCString originSanitized(originScope.GetOrigin());
SanitizeOriginString(originSanitized);
originScope.SetOrigin(originSanitized);
}
bool hasMore;
while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) && hasMore) {
@ -6445,9 +6359,9 @@ OriginClearOp::DeleteFiles(QuotaManager* aQuotaManager,
continue;
}
// Skip storages for other apps.
if (!PatternMatchesOrigin(originSanitized,
NS_ConvertUTF16toUTF8(leafName))) {
// Skip the origin directory if it doesn't match the pattern.
if (!originScope.MatchesOrigin(OriginScope::FromOrigin(
NS_ConvertUTF16toUTF8(leafName)))) {
continue;
}
@ -6517,8 +6431,8 @@ OriginClearOp::GetResponse(RequestResponse& aResponse)
{
AssertIsOnOwningThread();
if (mApp) {
aResponse = ClearAppResponse();
if (mMultiple) {
aResponse = ClearOriginsResponse();
} else {
aResponse = ClearOriginResponse();
}

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

@ -9,9 +9,11 @@
#include "mozilla/dom/quota/QuotaCommon.h"
#include "mozilla/BasePrincipal.h"
BEGIN_QUOTA_NAMESPACE
class OriginScope : public nsCString
class OriginScope
{
public:
enum Type
@ -24,19 +26,25 @@ public:
static OriginScope
FromOrigin(const nsACString& aOrigin)
{
return OriginScope(aOrigin, eOrigin);
return OriginScope(aOrigin);
}
static OriginScope
FromPattern(const nsACString& aPattern)
FromPattern(const mozilla::OriginAttributesPattern& aPattern)
{
return OriginScope(aPattern, ePattern);
return OriginScope(aPattern);
}
static OriginScope
FromJSONPattern(const nsAString& aJSONPattern)
{
return OriginScope(aJSONPattern);
}
static OriginScope
FromNull()
{
return OriginScope(NullCString(), eNull);
return OriginScope();
}
bool
@ -66,32 +74,157 @@ public:
void
SetFromOrigin(const nsACString& aOrigin)
{
Assign(aOrigin);
mOrigin = aOrigin;
mType = eOrigin;
nsCString originNoSuffix;
MOZ_ALWAYS_TRUE(mOriginAttributes.PopulateFromOrigin(aOrigin,
originNoSuffix));
}
void
SetFromPattern(const nsACString& aPattern)
SetFromPattern(const mozilla::OriginAttributesPattern& aPattern)
{
Assign(aPattern);
mPattern = aPattern;
mType = ePattern;
}
void
SetFromJSONPattern(const nsAString& aJSONPattern)
{
MOZ_ALWAYS_TRUE(mPattern.Init(aJSONPattern));
mType = ePattern;
}
void
SetFromNull()
{
SetIsVoid(true);
mType = eNull;
}
const nsACString&
GetOrigin() const
{
MOZ_ASSERT(IsOrigin());
return mOrigin;
}
void
SetOrigin(const nsACString& aOrigin)
{
MOZ_ASSERT(IsOrigin());
mOrigin = aOrigin;
}
const mozilla::OriginAttributes&
GetOriginAttributes() const
{
MOZ_ASSERT(IsOrigin());
return mOriginAttributes;
}
const mozilla::OriginAttributesPattern&
GetPattern() const
{
MOZ_ASSERT(IsPattern());
return mPattern;
}
bool MatchesOrigin(const OriginScope& aOther) const
{
MOZ_ASSERT(aOther.IsOrigin());
bool match;
if (IsOrigin()) {
match = mOrigin.Equals(aOther.mOrigin);
} else if (IsPattern()) {
match = mPattern.Matches(aOther.mOriginAttributes);
} else {
match = true;
}
return match;
}
bool MatchesPattern(const OriginScope& aOther) const
{
MOZ_ASSERT(aOther.IsPattern());
bool match;
if (IsOrigin()) {
match = aOther.mPattern.Matches(mOriginAttributes);
} else if (IsPattern()) {
match = mPattern.Overlaps(aOther.mPattern);
} else {
match = true;
}
return match;
}
bool Matches(const OriginScope& aOther) const
{
bool match;
if (aOther.IsOrigin()) {
match = MatchesOrigin(aOther);
} else if (aOther.IsPattern()) {
match = MatchesPattern(aOther);
} else {
match = true;
}
return match;
}
OriginScope
Clone()
{
if (IsOrigin()) {
return OriginScope(mOrigin);
}
if (IsPattern()) {
return OriginScope(mPattern);
}
MOZ_ASSERT(IsNull());
return OriginScope();
}
private:
OriginScope(const nsACString& aString, Type aType)
: nsCString(aString), mType(aType)
explicit OriginScope(const nsACString& aOrigin)
: mOrigin(aOrigin)
, mType(eOrigin)
{
nsCString originNoSuffix;
MOZ_ALWAYS_TRUE(mOriginAttributes.PopulateFromOrigin(aOrigin,
originNoSuffix));
}
explicit OriginScope(const mozilla::OriginAttributesPattern& aPattern)
: mPattern(aPattern)
, mType(ePattern)
{ }
explicit OriginScope(const nsAString& aJSONPattern)
: mType(ePattern)
{
MOZ_ALWAYS_TRUE(mPattern.Init(aJSONPattern));
}
OriginScope()
: mType(eNull)
{ }
bool
operator==(const OriginScope& aOther) = delete;
nsCString mOrigin;
PrincipalOriginAttributes mOriginAttributes;
mozilla::OriginAttributesPattern mPattern;
Type mType;
};

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

@ -34,10 +34,9 @@ struct ClearOriginParams
bool persistenceTypeIsExplicit;
};
struct ClearAppParams
struct ClearOriginsParams
{
uint32_t appId;
bool browserOnly;
nsString pattern;
};
struct ClearAllParams
@ -51,7 +50,7 @@ struct ResetAllParams
union RequestParams
{
ClearOriginParams;
ClearAppParams;
ClearOriginsParams;
ClearAllParams;
ResetAllParams;
};

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

@ -12,7 +12,7 @@ struct ClearOriginResponse
{
};
struct ClearAppResponse
struct ClearOriginsResponse
{
};
@ -28,7 +28,7 @@ union RequestResponse
{
nsresult;
ClearOriginResponse;
ClearAppResponse;
ClearOriginsResponse;
ClearAllResponse;
ResetAllResponse;
};

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

@ -100,13 +100,6 @@ class QuotaManager final
friend class OriginInfo;
friend class QuotaObject;
enum MozBrowserPatternFlag
{
MozBrowser = 0,
NotMozBrowser,
IgnoreMozBrowser
};
typedef nsClassHashtable<nsCStringHashKey,
nsTArray<DirectoryLockImpl*>> DirectoryLockTable;
@ -396,24 +389,6 @@ public:
static void
ChromeOrigin(nsACString& aOrigin);
static void
GetOriginPatternString(uint32_t aAppId, bool aBrowserOnly,
const nsACString& aOrigin, nsAutoCString& _retval)
{
return GetOriginPatternString(aAppId,
aBrowserOnly ? MozBrowser : NotMozBrowser,
aOrigin, _retval);
}
static void
GetOriginPatternStringMaybeIgnoreBrowser(uint32_t aAppId, bool aBrowserOnly,
nsAutoCString& _retval)
{
return GetOriginPatternString(aAppId,
aBrowserOnly ? MozBrowser : IgnoreMozBrowser,
EmptyCString(), _retval);
}
private:
QuotaManager();
@ -508,12 +483,6 @@ private:
DirectoryLockTable&
GetDirectoryLockTable(PersistenceType aPersistenceType);
static void
GetOriginPatternString(uint32_t aAppId,
MozBrowserPatternFlag aBrowserFlag,
const nsACString& aOrigin,
nsAutoCString& _retval);
static void
ShutdownTimerCallback(nsITimer* aTimer, void* aClosure);

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

@ -7,7 +7,6 @@
#include "QuotaManagerService.h"
#include "ActorsChild.h"
#include "mozIApplicationClearPrivateDataParams.h"
#include "mozilla/BasePrincipal.h"
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/Hal.h"
@ -643,34 +642,15 @@ QuotaManagerService::Observe(nsISupports* aSubject,
return NS_OK;
}
if (!strcmp(aTopic, TOPIC_WEB_APP_CLEAR_DATA)) {
nsCOMPtr<mozIApplicationClearPrivateDataParams> params =
do_QueryInterface(aSubject);
if (NS_WARN_IF(!params)) {
return NS_ERROR_UNEXPECTED;
}
uint32_t appId;
nsresult rv = params->GetAppId(&appId);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
bool browserOnly;
rv = params->GetBrowserOnly(&browserOnly);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
if (!strcmp(aTopic, "clear-origin-data")) {
RefPtr<Request> request = new Request();
ClearAppParams requestParams;
requestParams.appId() = appId;
requestParams.browserOnly() = browserOnly;
ClearOriginsParams requestParams;
requestParams.pattern() = nsDependentString(aData);
nsAutoPtr<PendingRequestInfo> info(new RequestInfo(request, requestParams));
rv = InitiateRequest(info);
nsresult rv = InitiateRequest(info);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}

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

@ -1363,7 +1363,7 @@ static const mozilla::Module::CategoryEntry kLayoutCategories[] = {
#ifndef MOZ_SIMPLEPUSH
{ "app-startup", "Push Notifier", "service," PUSHNOTIFIER_CONTRACTID },
#endif
{ TOPIC_WEB_APP_CLEAR_DATA, "QuotaManagerService", "service," QUOTAMANAGER_SERVICE_CONTRACTID },
{ "clear-origin-data", "QuotaManagerService", "service," QUOTAMANAGER_SERVICE_CONTRACTID },
{ OBSERVER_TOPIC_IDLE_DAILY, "QuotaManagerService", QUOTAMANAGER_SERVICE_CONTRACTID },
#ifdef MOZ_WIDGET_GONK
{ "app-startup", "Volume Service", "service," NS_VOLUMESERVICE_CONTRACTID },