Bug 1718197 - Simplify access to FirstInitializationAttempt objects in initialization functions; r=dom-storage-reviewers,asuth

Differential Revision: https://phabricator.services.mozilla.com/D119389
This commit is contained in:
Jan Varga 2021-07-31 16:32:13 +00:00
Родитель 368b3baa4c
Коммит a418c56853
5 изменённых файлов: 49 добавлений и 50 удалений

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

@ -3096,11 +3096,6 @@ bool VerifyOriginKey(const nsACString& aOriginKey,
return true;
}
LSInitializationInfo& MutableInitializationInfoRef() {
MOZ_ASSERT(gInitializationInfo);
return *gInitializationInfo;
}
LSInitializationInfo& MutableInitializationInfoRef(const CreateIfNonExistent&) {
if (!gInitializationInfo) {
gInitializationInfo = new LSInitializationInfo();
@ -3111,7 +3106,9 @@ LSInitializationInfo& MutableInitializationInfoRef(const CreateIfNonExistent&) {
template <typename Func>
auto ExecuteOriginInitialization(const nsACString& aOrigin,
const LSOriginInitialization aInitialization,
Func&& aFunc) -> std::invoke_result_t<Func> {
Func&& aFunc)
-> std::invoke_result_t<Func, const FirstInitializationAttempt<
LSOriginInitialization, Nothing>&> {
return ExecuteInitialization(
MutableInitializationInfoRef(CreateIfNonExistent{})
.MutableOriginInitializationInfoRef(aOrigin, CreateIfNonExistent{}),
@ -6803,15 +6800,13 @@ nsresult PrepareDatastoreOp::DatabaseWork() {
MOZ_ASSERT(mState == State::Nesting);
MOZ_ASSERT(mNestedState == NestedState::DatabaseWorkOpen);
const auto innerFunc = [&]() -> nsresult {
const auto innerFunc =
[&](const auto& firstInitializationAttempt) -> nsresult {
// XXX This function is too long, refactor it into helper functions for
// readability.
const auto maybeExtraInfo =
MutableInitializationInfoRef()
.MutableOriginInitializationInfoRef(mOriginMetadata.mOrigin)
.FirstInitializationAttemptPending(
LSOriginInitialization::Datastore)
firstInitializationAttempt.Pending()
? Some(ScopedLogExtraInfo{
ScopedLogExtraInfo::kTagContext,
"dom::localstorage::FirstOriginInitializationAttempt::Datastore"_ns})

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

@ -4238,7 +4238,7 @@ nsresult QuotaManager::LoadQuota() {
QM_TRY(([&]() -> Result<Ok, nsresult> {
QM_TRY(([this, type] {
const auto innerFunc = [&]() -> nsresult {
const auto innerFunc = [&](const auto&) -> nsresult {
return InitializeRepository(type);
};
@ -5008,7 +5008,7 @@ QuotaManager::UpgradeFromIndexedDBDirectoryToPersistentStorageDirectory(
AssertIsOnIOThread();
MOZ_ASSERT(aIndexedDBDir);
const auto innerFunc = [this, &aIndexedDBDir]() -> nsresult {
const auto innerFunc = [this, &aIndexedDBDir](const auto&) -> nsresult {
bool isDirectory;
QM_TRY(aIndexedDBDir->IsDirectory(&isDirectory));
@ -5063,7 +5063,8 @@ QuotaManager::UpgradeFromPersistentStorageDirectoryToDefaultStorageDirectory(
AssertIsOnIOThread();
MOZ_ASSERT(aPersistentStorageDir);
const auto innerFunc = [this, &aPersistentStorageDir]() -> nsresult {
const auto innerFunc = [this,
&aPersistentStorageDir](const auto&) -> nsresult {
QM_TRY_INSPECT(const bool& isDirectory,
MOZ_TO_RESULT_INVOKE(aPersistentStorageDir, IsDirectory));
@ -5178,7 +5179,7 @@ nsresult QuotaManager::UpgradeStorageFrom0_0To1_0(
AssertIsOnIOThread();
MOZ_ASSERT(aConnection);
const auto innerFunc = [this, &aConnection]() -> nsresult {
const auto innerFunc = [this, &aConnection](const auto&) -> nsresult {
QM_TRY(UpgradeStorage<UpgradeStorageFrom0_0To1_0Helper>(
0, MakeStorageVersion(1, 0), aConnection));
@ -5261,7 +5262,7 @@ nsresult QuotaManager::UpgradeStorageFrom1_0To2_0(
// manager directories without the ".files" suffix then prevent current
// Firefox from initializing and using the storage.
const auto innerFunc = [this, &aConnection]() -> nsresult {
const auto innerFunc = [this, &aConnection](const auto&) -> nsresult {
QM_TRY(UpgradeStorage<UpgradeStorageFrom1_0To2_0Helper>(
MakeStorageVersion(1, 0), MakeStorageVersion(2, 0), aConnection));
@ -5280,7 +5281,7 @@ nsresult QuotaManager::UpgradeStorageFrom2_0To2_1(
// The upgrade is mainly to create a directory padding file in DOM Cache
// directory to record the overall padding size of an origin.
const auto innerFunc = [this, &aConnection]() -> nsresult {
const auto innerFunc = [this, &aConnection](const auto&) -> nsresult {
QM_TRY(UpgradeStorage<UpgradeStorageFrom2_0To2_1Helper>(
MakeStorageVersion(2, 0), MakeStorageVersion(2, 1), aConnection));
@ -5299,7 +5300,7 @@ nsresult QuotaManager::UpgradeStorageFrom2_1To2_2(
// The upgrade is mainly to clean obsolete origins in the repositoies, remove
// asmjs client, and ".tmp" file in the idb folers.
const auto innerFunc = [this, &aConnection]() -> nsresult {
const auto innerFunc = [this, &aConnection](const auto&) -> nsresult {
QM_TRY(UpgradeStorage<UpgradeStorageFrom2_1To2_2Helper>(
MakeStorageVersion(2, 1), MakeStorageVersion(2, 2), aConnection));
@ -5315,7 +5316,7 @@ nsresult QuotaManager::UpgradeStorageFrom2_2To2_3(
AssertIsOnIOThread();
MOZ_ASSERT(aConnection);
const auto innerFunc = [&aConnection]() -> nsresult {
const auto innerFunc = [&aConnection](const auto&) -> nsresult {
// Table `database`
QM_TRY(aConnection->ExecuteSimpleSQL(
nsLiteralCString("CREATE TABLE database"
@ -5983,10 +5984,8 @@ Result<Ok, nsresult> QuotaManager::CreateEmptyLocalStorageArchive(
nsresult QuotaManager::EnsureStorageIsInitialized() {
DiagnosticAssertIsOnIOThread();
const auto innerFunc = [&]() -> nsresult {
const auto firstInitializationAttempt =
mInitializationInfo.FirstInitializationAttempt(Initialization::Storage);
const auto innerFunc =
[&](const auto& firstInitializationAttempt) -> nsresult {
const auto maybeExtraInfo =
firstInitializationAttempt.Pending()
? Some(ScopedLogExtraInfo{
@ -6096,13 +6095,9 @@ QuotaManager::EnsurePersistentOriginIsInitialized(
MOZ_ASSERT(aOriginMetadata.mPersistenceType == PERSISTENCE_TYPE_PERSISTENT);
MOZ_DIAGNOSTIC_ASSERT(mStorageConnection);
const auto innerFunc = [&aOriginMetadata, this]()
const auto innerFunc = [&aOriginMetadata,
this](const auto& firstInitializationAttempt)
-> mozilla::Result<std::pair<nsCOMPtr<nsIFile>, bool>, nsresult> {
const auto firstInitializationAttempt =
mInitializationInfo
.MutableOriginInitializationInfoRef(aOriginMetadata.mOrigin)
.FirstInitializationAttempt(OriginInitialization::PersistentOrigin);
const auto maybeExtraInfo =
firstInitializationAttempt.Pending()
? Some(ScopedLogExtraInfo{
@ -6167,13 +6162,11 @@ QuotaManager::EnsureTemporaryOriginIsInitialized(
MOZ_DIAGNOSTIC_ASSERT(mStorageConnection);
MOZ_DIAGNOSTIC_ASSERT(mTemporaryStorageInitialized);
const auto innerFunc = [&aPersistenceType, &aOriginMetadata, this]()
const auto innerFunc = [&aPersistenceType, &aOriginMetadata,
this](const auto& firstInitializationAttempt)
-> mozilla::Result<std::pair<nsCOMPtr<nsIFile>, bool>, nsresult> {
const auto maybeExtraInfo =
mInitializationInfo
.MutableOriginInitializationInfoRef(aOriginMetadata.mOrigin)
.FirstInitializationAttemptPending(
OriginInitialization::TemporaryOrigin)
firstInitializationAttempt.Pending()
? Some(ScopedLogExtraInfo{
ScopedLogExtraInfo::kTagContext,
"dom::quota::FirstOriginInitializationAttempt::TemporaryOrigin"_ns})
@ -6216,11 +6209,8 @@ nsresult QuotaManager::EnsureTemporaryStorageIsInitialized() {
AssertIsOnIOThread();
MOZ_DIAGNOSTIC_ASSERT(mStorageConnection);
const auto innerFunc = [&]() -> nsresult {
const auto firstInitializationAttempt =
mInitializationInfo.FirstInitializationAttempt(
Initialization::TemporaryStorage);
const auto innerFunc =
[&](const auto& firstInitializationAttempt) -> nsresult {
const auto maybeExtraInfo =
firstInitializationAttempt.Pending()
? Some(ScopedLogExtraInfo{
@ -7081,7 +7071,8 @@ int64_t QuotaManager::GenerateDirectoryLockId() {
template <typename Func>
auto QuotaManager::ExecuteInitialization(const Initialization aInitialization,
Func&& aFunc)
-> std::invoke_result_t<Func> {
-> std::invoke_result_t<Func, const FirstInitializationAttempt<
Initialization, StringGenerator>&> {
return quota::ExecuteInitialization(mInitializationInfo, aInitialization,
std::forward<Func>(aFunc));
}
@ -7089,7 +7080,9 @@ auto QuotaManager::ExecuteInitialization(const Initialization aInitialization,
template <typename Func>
auto QuotaManager::ExecuteOriginInitialization(
const nsACString& aOrigin, const OriginInitialization aInitialization,
Func&& aFunc) -> std::invoke_result_t<Func> {
Func&& aFunc)
-> std::invoke_result_t<Func, const FirstInitializationAttempt<
Initialization, StringGenerator>&> {
return quota::ExecuteInitialization(
mInitializationInfo.MutableOriginInitializationInfoRef(
aOrigin, CreateIfNonExistent{}),

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

@ -66,6 +66,10 @@ class FirstInitializationAttempts {
}
};
template <typename Initialization, typename StringGenerator>
using FirstInitializationAttempt = typename FirstInitializationAttempts<
Initialization, StringGenerator>::FirstInitializationAttemptImpl;
} // namespace mozilla::dom::quota
#endif // DOM_QUOTA_FIRSTINITIALIZATIONATTEMPTS_H_

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

@ -1554,10 +1554,15 @@ auto ExecuteInitialization(
FirstInitializationAttempts<Initialization, StringGenerator>&
aFirstInitializationAttempts,
const Initialization aInitialization, Func&& aFunc)
-> std::invoke_result_t<Func> {
using RetType = std::invoke_result_t<Func>;
-> std::invoke_result_t<Func, const FirstInitializationAttempt<
Initialization, StringGenerator>&> {
using RetType = std::invoke_result_t<
Func, const FirstInitializationAttempt<Initialization, StringGenerator>&>;
auto res = std::forward<Func>(aFunc)();
auto firstInitializationAttempt =
aFirstInitializationAttempts.FirstInitializationAttempt(aInitialization);
auto res = std::forward<Func>(aFunc)(firstInitializationAttempt);
const auto rv = [&res]() -> nsresult {
if constexpr (std::is_same_v<RetType, nsresult>) {
@ -1579,10 +1584,8 @@ auto ExecuteInitialization(
return res;
}
if (!aFirstInitializationAttempts.FirstInitializationAttemptRecorded(
aInitialization)) {
aFirstInitializationAttempts.RecordFirstInitializationAttempt(
aInitialization, rv);
if (!firstInitializationAttempt.Recorded()) {
firstInitializationAttempt.Record(rv);
}
return res;

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

@ -550,12 +550,16 @@ class QuotaManager final : public BackgroundThreadObject {
template <typename Func>
auto ExecuteInitialization(Initialization aInitialization, Func&& aFunc)
-> std::invoke_result_t<Func>;
-> std::invoke_result_t<Func, const FirstInitializationAttempt<
Initialization, StringGenerator>&>;
template <typename Func>
auto ExecuteOriginInitialization(const nsACString& aOrigin,
const OriginInitialization aInitialization,
Func&& aFunc) -> std::invoke_result_t<Func>;
Func&& aFunc)
-> std::invoke_result_t<Func, const FirstInitializationAttempt<
Initialization, StringGenerator>&>;
template <typename Iterator>
static void MaybeInsertNonPersistedOriginInfos(