From 6a5b33a1f69d15fcc2932923d1e4a681be2e371e Mon Sep 17 00:00:00 2001 From: Mounir Lamouri Date: Thu, 27 Sep 2012 16:28:01 +0100 Subject: [PATCH] Bug 786301 - 1/3 - Add RemoveAllForApp on nsDOMStorageDBWrapper and nsDOMStoragePersistentDB. r=honza --- dom/src/storage/nsDOMStorageDBWrapper.cpp | 9 ++++++ dom/src/storage/nsDOMStorageDBWrapper.h | 9 ++++++ dom/src/storage/nsDOMStoragePersistentDB.cpp | 33 ++++++++++++++++++++ dom/src/storage/nsDOMStoragePersistentDB.h | 9 ++++++ 4 files changed, 60 insertions(+) diff --git a/dom/src/storage/nsDOMStorageDBWrapper.cpp b/dom/src/storage/nsDOMStorageDBWrapper.cpp index 764f6dd0efa1..33eda4e86600 100644 --- a/dom/src/storage/nsDOMStorageDBWrapper.cpp +++ b/dom/src/storage/nsDOMStorageDBWrapper.cpp @@ -202,6 +202,15 @@ nsDOMStorageDBWrapper::RemoveAll() return rv; } +nsresult +nsDOMStorageDBWrapper::RemoveAllForApp(uint32_t aAppId, bool aOnlyBrowserElement) +{ + // We only care about removing the permament storage. Temporary storage such + // as session storage or private browsing storage will not be re-used anyway + // and will be automatically deleted at some point. + return mPersistentDB.RemoveAllForApp(aAppId, aOnlyBrowserElement); +} + nsresult nsDOMStorageDBWrapper::GetUsage(DOMStorageImpl* aStorage, int32_t *aUsage) { diff --git a/dom/src/storage/nsDOMStorageDBWrapper.h b/dom/src/storage/nsDOMStorageDBWrapper.h index a20ea18d632e..519699e7fdcf 100644 --- a/dom/src/storage/nsDOMStorageDBWrapper.h +++ b/dom/src/storage/nsDOMStorageDBWrapper.h @@ -137,6 +137,15 @@ public: nsresult RemoveAll(); + /** + * Removes all keys from storage for a specific app. + * If aOnlyBrowserElement is true, it will remove only keys with the + * browserElement flag set. + * aAppId has to be a valid app id. It can't be NO_APP_ID or UNKNOWN_APP_ID. + */ + nsresult + RemoveAllForApp(uint32_t aAppId, bool aOnlyBrowserElement); + /** * Returns usage for a storage using its GetQuotaDBKey() as a key. */ diff --git a/dom/src/storage/nsDOMStoragePersistentDB.cpp b/dom/src/storage/nsDOMStoragePersistentDB.cpp index 2e8d4fe849bb..e6041ed1ed0e 100644 --- a/dom/src/storage/nsDOMStoragePersistentDB.cpp +++ b/dom/src/storage/nsDOMStoragePersistentDB.cpp @@ -664,6 +664,39 @@ nsDOMStoragePersistentDB::RemoveAll() return NS_OK; } +nsresult +nsDOMStoragePersistentDB::RemoveAllForApp(uint32_t aAppId, bool aOnlyBrowserElement) +{ + nsresult rv; + + rv = MaybeCommitInsertTransaction(); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr stmt = mStatements.GetCachedStatement( + "DELETE FROM webappsstore2_view " + "WHERE scope LIKE :scope" + ); + NS_ENSURE_STATE(stmt); + mozStorageStatementScoper scopeStmt(stmt); + + nsAutoCString scope; + scope.AppendInt(aAppId); + if (aOnlyBrowserElement) { + scope.Append(NS_LITERAL_CSTRING(":t:%")); + } else { + scope.Append(NS_LITERAL_CSTRING(":_:%")); + } + rv = stmt->BindUTF8StringByName(NS_LITERAL_CSTRING("scope"), scope); + NS_ENSURE_SUCCESS(rv, rv); + + rv = stmt->Execute(); + NS_ENSURE_SUCCESS(rv, rv); + + MarkAllScopesDirty(); + + return NS_OK; +} + nsresult nsDOMStoragePersistentDB::GetUsage(DOMStorageImpl* aStorage, int32_t *aUsage) diff --git a/dom/src/storage/nsDOMStoragePersistentDB.h b/dom/src/storage/nsDOMStoragePersistentDB.h index 72d7f691d384..5519adb1d184 100644 --- a/dom/src/storage/nsDOMStoragePersistentDB.h +++ b/dom/src/storage/nsDOMStoragePersistentDB.h @@ -98,6 +98,15 @@ public: nsresult RemoveAll(); + /** + * Removes all keys from storage for a specific app. + * If aOnlyBrowserElement is true, it will remove only keys with the + * browserElement flag set. + * aAppId has to be a valid app id. It can't be NO_APP_ID or UNKNOWN_APP_ID. + */ + nsresult + RemoveAllForApp(uint32_t aAppId, bool aOnlyBrowserElement); + /** * Returns usage for a storage using its GetQuotaDBKey() as a key. */