mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-03 15:26:07 +00:00
Bug 1750791 - Part 3: Simplify UntrustedModulesBackupService. r=mhowell
`UntrustedModulesBackupService` manages two `UntrustedModulesBackupData` instances to hold third-party module loading events. We can simply have two members instead of an array of two items, that makes the code more readable. Depends on D137245 Differential Revision: https://phabricator.services.mozilla.com/D137246
This commit is contained in:
parent
92220ca366
commit
74d6f9d144
@ -29,8 +29,6 @@ using MultiGetUntrustedModulesPromise =
|
||||
MozPromise<bool /*aIgnored*/, nsresult, true>;
|
||||
|
||||
class MOZ_HEAP_CLASS MultiGetUntrustedModulesData final {
|
||||
using BackupType = UntrustedModulesBackupService::BackupType;
|
||||
|
||||
public:
|
||||
/**
|
||||
* @param aFlags [in] Combinations of the flags defined under nsITelemetry.
|
||||
@ -101,7 +99,7 @@ class MOZ_HEAP_CLASS MultiGetUntrustedModulesData final {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
if (aResult.isSome()) {
|
||||
mBackupSvc->Backup(BackupType::Staging, std::move(aResult.ref()));
|
||||
mBackupSvc->Backup(std::move(aResult.ref()));
|
||||
}
|
||||
|
||||
OnCompletion();
|
||||
@ -172,12 +170,12 @@ void MultiGetUntrustedModulesData::Serialize(RefPtr<dom::Promise>&& aPromise) {
|
||||
if (mFlags & nsITelemetry::EXCLUDE_STACKINFO_FROM_LOADEVENTS) {
|
||||
// Without the stack info, we can add multiple UntrustedModulesData to
|
||||
// the serializer directly.
|
||||
rv = serializer.Add(mBackupSvc->Ref(BackupType::Staging));
|
||||
rv = serializer.Add(mBackupSvc->Staging());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
aPromise->MaybeReject(rv);
|
||||
return;
|
||||
}
|
||||
rv = serializer.Add(mBackupSvc->Ref(BackupType::Settled));
|
||||
rv = serializer.Add(mBackupSvc->Settled());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
aPromise->MaybeReject(rv);
|
||||
return;
|
||||
@ -194,8 +192,7 @@ void MultiGetUntrustedModulesData::Serialize(RefPtr<dom::Promise>&& aPromise) {
|
||||
// to "Settled" first, then add "Settled" to the serializer.
|
||||
mBackupSvc->SettleAllStagingData();
|
||||
|
||||
const UntrustedModulesBackupData& settledRef =
|
||||
mBackupSvc->Ref(BackupType::Settled);
|
||||
const UntrustedModulesBackupData& settledRef = mBackupSvc->Settled();
|
||||
if (settledRef.IsEmpty()) {
|
||||
aPromise->MaybeReject(NS_ERROR_NOT_AVAILABLE);
|
||||
return;
|
||||
@ -210,8 +207,7 @@ void MultiGetUntrustedModulesData::Serialize(RefPtr<dom::Promise>&& aPromise) {
|
||||
} else {
|
||||
// When INCLUDE_OLD_LOADEVENTS is not set, we serialize only the "Staging"
|
||||
// into a JS object.
|
||||
const UntrustedModulesBackupData& stagingRef =
|
||||
mBackupSvc->Ref(BackupType::Staging);
|
||||
const UntrustedModulesBackupData& stagingRef = mBackupSvc->Staging();
|
||||
|
||||
if (stagingRef.IsEmpty()) {
|
||||
aPromise->MaybeReject(NS_ERROR_NOT_AVAILABLE);
|
||||
|
@ -65,27 +65,20 @@ UntrustedModulesBackupService* UntrustedModulesBackupService::Get() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
void UntrustedModulesBackupService::Backup(BackupType aType,
|
||||
UntrustedModulesData&& aData) {
|
||||
mBackup[static_cast<uint32_t>(aType)].Add(std::move(aData));
|
||||
void UntrustedModulesBackupService::Backup(UntrustedModulesData&& aData) {
|
||||
mStaging.Add(std::move(aData));
|
||||
}
|
||||
|
||||
void UntrustedModulesBackupService::SettleAllStagingData() {
|
||||
UntrustedModulesBackupData staging;
|
||||
staging.SwapElements(mBackup[static_cast<uint32_t>(BackupType::Staging)]);
|
||||
staging.SwapElements(mStaging);
|
||||
|
||||
for (auto&& iter = staging.Iter(); !iter.Done(); iter.Next()) {
|
||||
if (!iter.Data()) {
|
||||
continue;
|
||||
}
|
||||
mBackup[static_cast<uint32_t>(BackupType::Settled)].Add(
|
||||
std::move(iter.Data()->mData));
|
||||
mSettled.Add(std::move(iter.Data()->mData));
|
||||
}
|
||||
}
|
||||
|
||||
const UntrustedModulesBackupData& UntrustedModulesBackupService::Ref(
|
||||
BackupType aType) const {
|
||||
return mBackup[static_cast<uint32_t>(aType)];
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
@ -44,22 +44,24 @@ class UntrustedModulesBackupData
|
||||
|
||||
class MOZ_HEAP_CLASS UntrustedModulesBackupService final {
|
||||
public:
|
||||
enum class BackupType : uint32_t {
|
||||
Staging = 0,
|
||||
Settled,
|
||||
|
||||
Count
|
||||
};
|
||||
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(UntrustedModulesBackupService)
|
||||
|
||||
static UntrustedModulesBackupService* Get();
|
||||
void Backup(BackupType aType, UntrustedModulesData&& aData);
|
||||
|
||||
// Back up data to mStaging
|
||||
void Backup(UntrustedModulesData&& aData);
|
||||
|
||||
void SettleAllStagingData();
|
||||
const UntrustedModulesBackupData& Ref(BackupType aType) const;
|
||||
|
||||
const UntrustedModulesBackupData& Staging() const { return mStaging; }
|
||||
const UntrustedModulesBackupData& Settled() const { return mSettled; }
|
||||
|
||||
private:
|
||||
UntrustedModulesBackupData mBackup[static_cast<uint32_t>(BackupType::Count)];
|
||||
// Data not yet submitted as telemetry
|
||||
UntrustedModulesBackupData mStaging;
|
||||
|
||||
// Data already submitted as telemetry
|
||||
UntrustedModulesBackupData mSettled;
|
||||
|
||||
~UntrustedModulesBackupService() = default;
|
||||
};
|
||||
|
@ -427,18 +427,16 @@ TEST_F(UntrustedModulesFixture, Serialize) {
|
||||
}
|
||||
|
||||
TEST_F(UntrustedModulesFixture, Backup) {
|
||||
using BackupType = UntrustedModulesBackupService::BackupType;
|
||||
|
||||
RefPtr<UntrustedModulesBackupService> backupSvc(
|
||||
UntrustedModulesBackupService::Get());
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
backupSvc->Backup(BackupType::Staging, CollectSingleData());
|
||||
backupSvc->Backup(CollectSingleData());
|
||||
}
|
||||
|
||||
backupSvc->SettleAllStagingData();
|
||||
EXPECT_TRUE(backupSvc->Ref(BackupType::Staging).IsEmpty());
|
||||
EXPECT_TRUE(backupSvc->Staging().IsEmpty());
|
||||
|
||||
for (const auto& entry : backupSvc->Ref(BackupType::Settled)) {
|
||||
for (const auto& entry : backupSvc->Settled()) {
|
||||
const RefPtr<UntrustedModulesDataContainer>& container = entry.GetData();
|
||||
EXPECT_TRUE(!!container);
|
||||
const UntrustedModulesData& data = container->mData;
|
||||
|
Loading…
x
Reference in New Issue
Block a user