зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
368b3baa4c
Коммит
a418c56853
|
@ -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(
|
||||
|
|
Загрузка…
Ссылка в новой задаче