mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 05:10:49 +00:00
Bug 1688833 - Migrate LookupForAdd to WithEntryHandle in dom/base. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D104203
This commit is contained in:
parent
40403773d0
commit
d4f7649e81
@ -1105,14 +1105,12 @@ already_AddRefed<Promise> CustomElementRegistry::WhenDefined(
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
auto entry = mWhenDefinedPromiseMap.LookupForAdd(nameAtom);
|
||||
if (entry) {
|
||||
promise = entry.Data();
|
||||
} else {
|
||||
entry.OrInsert([&promise]() { return promise; });
|
||||
}
|
||||
|
||||
return promise.forget();
|
||||
return mWhenDefinedPromiseMap
|
||||
.WithEntryHandle(nameAtom,
|
||||
[&promise](auto&& entry) -> RefPtr<Promise> {
|
||||
return entry.OrInsert(std::move(promise));
|
||||
})
|
||||
.forget();
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -11827,11 +11827,17 @@ void Document::MaybePreconnect(nsIURI* aOrigURI, mozilla::CORSMode aCORSMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto entry = mPreloadedPreconnects.LookupForAdd(uri);
|
||||
if (entry) {
|
||||
return; // we found an existing entry
|
||||
const bool existingEntryFound =
|
||||
mPreloadedPreconnects.WithEntryHandle(uri, [](auto&& entry) {
|
||||
if (entry) {
|
||||
return true;
|
||||
}
|
||||
entry.Insert(true);
|
||||
return false;
|
||||
});
|
||||
if (existingEntryFound) {
|
||||
return;
|
||||
}
|
||||
entry.OrInsert([]() { return true; });
|
||||
|
||||
nsCOMPtr<nsISpeculativeConnect> speculator(
|
||||
do_QueryInterface(nsContentUtils::GetIOService()));
|
||||
|
@ -1633,9 +1633,13 @@ class Document : public nsINode,
|
||||
// If we have an entry and the selector list returned has a null
|
||||
// RawServoSelectorList*, that indicates that aSelector has already been
|
||||
// parsed and is not a syntactically valid selector.
|
||||
Table::EntryPtr GetList(const nsACString& aSelector) {
|
||||
template <typename F>
|
||||
RawServoSelectorList* GetListOrInsertFrom(const nsACString& aSelector,
|
||||
F&& aFrom) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return mTable.LookupForAdd(aSelector);
|
||||
return mTable.WithEntryHandle(aSelector, [&aFrom](auto&& entry) {
|
||||
return entry.OrInsertWith(std::forward<F>(aFrom)).get();
|
||||
});
|
||||
}
|
||||
|
||||
~SelectorCache();
|
||||
|
@ -218,8 +218,11 @@ void DocumentOrShadowRoot::CloneAdoptedSheetsFrom(
|
||||
MOZ_ASSERT(clonedSheetMap);
|
||||
|
||||
for (const StyleSheet* sheet : aSource.mAdoptedStyleSheets) {
|
||||
RefPtr<StyleSheet> clone = clonedSheetMap->LookupForAdd(sheet).OrInsert(
|
||||
[&] { return sheet->CloneAdoptedSheet(ownerDoc); });
|
||||
RefPtr<StyleSheet> clone = clonedSheetMap->WithEntryHandle(
|
||||
sheet, [&sheet, &ownerDoc](auto&& entry) {
|
||||
return entry.OrInsertWith(
|
||||
[&] { return sheet->CloneAdoptedSheet(ownerDoc); });
|
||||
});
|
||||
MOZ_ASSERT(clone);
|
||||
MOZ_DIAGNOSTIC_ASSERT(clone->ConstructorDocumentMatches(ownerDoc));
|
||||
DebugOnly<bool> succeeded = list.AppendElement(std::move(clone), fallible);
|
||||
@ -752,9 +755,9 @@ nsRadioGroupStruct* DocumentOrShadowRoot::GetRadioGroup(
|
||||
|
||||
nsRadioGroupStruct* DocumentOrShadowRoot::GetOrCreateRadioGroup(
|
||||
const nsAString& aName) {
|
||||
return mRadioGroups.LookupForAdd(aName)
|
||||
.OrInsert([]() { return new nsRadioGroupStruct(); })
|
||||
.get();
|
||||
return mRadioGroups.WithEntryHandle(aName, [](auto&& entry) {
|
||||
return entry.OrInsertWith([] { return new nsRadioGroupStruct(); }).get();
|
||||
});
|
||||
}
|
||||
|
||||
int32_t DocumentOrShadowRoot::StyleOrderIndexOfSheet(
|
||||
|
@ -3954,13 +3954,13 @@ void Element::RegisterIntersectionObserver(DOMIntersectionObserver* aObserver) {
|
||||
return;
|
||||
}
|
||||
|
||||
observers->LookupForAdd(aObserver).OrInsert([]() {
|
||||
observers->WithEntryHandle(aObserver, [](auto&& entry) {
|
||||
// Value can be:
|
||||
// -2: Makes sure next calculated threshold always differs, leading to a
|
||||
// notification task being scheduled.
|
||||
// -1: Non-intersecting.
|
||||
// >= 0: Intersecting, valid index of aObserver->mThresholds.
|
||||
return eUninitialized;
|
||||
entry.OrInsert(eUninitialized);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -23,28 +23,31 @@ ImageTracker::~ImageTracker() { SetLockingState(false); }
|
||||
nsresult ImageTracker::Add(imgIRequest* aImage) {
|
||||
MOZ_ASSERT(aImage);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
auto entry = mImages.LookupForAdd(aImage);
|
||||
if (entry) {
|
||||
// The image is already in the hashtable. Increment its count.
|
||||
uint32_t oldCount = entry.Data();
|
||||
MOZ_ASSERT(oldCount > 0, "Entry in the image tracker with count 0!");
|
||||
entry.Data() = oldCount + 1;
|
||||
} else {
|
||||
// A new entry was inserted - set the count to 1.
|
||||
entry.OrInsert([]() { return 1; });
|
||||
const nsresult rv = mImages.WithEntryHandle(aImage, [&](auto&& entry) {
|
||||
nsresult rv = NS_OK;
|
||||
if (entry) {
|
||||
// The image is already in the hashtable. Increment its count.
|
||||
uint32_t oldCount = entry.Data();
|
||||
MOZ_ASSERT(oldCount > 0, "Entry in the image tracker with count 0!");
|
||||
entry.Data() = oldCount + 1;
|
||||
} else {
|
||||
// A new entry was inserted - set the count to 1.
|
||||
entry.Insert(1);
|
||||
|
||||
// If we're locking images, lock this image too.
|
||||
if (mLocking) {
|
||||
rv = aImage->LockImage();
|
||||
// If we're locking images, lock this image too.
|
||||
if (mLocking) {
|
||||
rv = aImage->LockImage();
|
||||
}
|
||||
|
||||
// If we're animating images, request that this image be animated too.
|
||||
if (mAnimating) {
|
||||
nsresult rv2 = aImage->IncrementAnimationConsumers();
|
||||
rv = NS_SUCCEEDED(rv) ? rv2 : rv;
|
||||
}
|
||||
}
|
||||
|
||||
// If we're animating images, request that this image be animated too.
|
||||
if (mAnimating) {
|
||||
nsresult rv2 = aImage->IncrementAnimationConsumers();
|
||||
rv = NS_SUCCEEDED(rv) ? rv2 : rv;
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
});
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -150,8 +150,10 @@ void ResizeObserver::Observe(Element& aTarget,
|
||||
mDocument->AddResizeObserver(*this);
|
||||
}
|
||||
|
||||
RefPtr<ResizeObservation>& observation =
|
||||
mObservationMap.LookupForAdd(&aTarget).OrInsert([] { return nullptr; });
|
||||
auto& observation = mObservationMap.WithEntryHandle(
|
||||
&aTarget, [](auto&& entry) -> RefPtr<ResizeObservation>& {
|
||||
return entry.OrInsert(nullptr);
|
||||
});
|
||||
if (observation) {
|
||||
if (observation->BoxOptions() == aOptions.mBox) {
|
||||
// Already observed this target and the observed box is the same, so
|
||||
|
@ -319,11 +319,15 @@ void nsMutationReceiver::ContentRemoved(nsIContent* aChild,
|
||||
if (Observer()->GetReceiverFor(aChild, false, false) != orig) {
|
||||
bool transientExists = false;
|
||||
bool isNewEntry = false;
|
||||
const auto& transientReceivers =
|
||||
Observer()->mTransientReceivers.LookupForAdd(aChild).OrInsert(
|
||||
[&isNewEntry]() {
|
||||
isNewEntry = true;
|
||||
return new nsCOMArray<nsMutationReceiver>();
|
||||
auto* const transientReceivers =
|
||||
Observer()->mTransientReceivers.WithEntryHandle(
|
||||
aChild, [&isNewEntry](auto&& entry) {
|
||||
return entry
|
||||
.OrInsertWith([&isNewEntry] {
|
||||
isNewEntry = true;
|
||||
return new nsCOMArray<nsMutationReceiver>();
|
||||
})
|
||||
.get();
|
||||
});
|
||||
if (!isNewEntry) {
|
||||
for (int32_t i = 0; i < transientReceivers->Count(); ++i) {
|
||||
@ -1034,9 +1038,13 @@ void nsAutoMutationBatch::Done() {
|
||||
}
|
||||
|
||||
if (allObservers.Length()) {
|
||||
const auto& transientReceivers =
|
||||
ob->mTransientReceivers.LookupForAdd(removed).OrInsert(
|
||||
[]() { return new nsCOMArray<nsMutationReceiver>(); });
|
||||
auto* const transientReceivers =
|
||||
ob->mTransientReceivers.WithEntryHandle(removed, [](auto&& entry) {
|
||||
return entry
|
||||
.OrInsertWith(
|
||||
[] { return new nsCOMArray<nsMutationReceiver>(); })
|
||||
.get();
|
||||
});
|
||||
for (uint32_t k = 0; k < allObservers.Length(); ++k) {
|
||||
nsMutationReceiver* r = allObservers[k];
|
||||
nsMutationReceiver* orig = r->GetParent() ? r->GetParent() : r;
|
||||
|
@ -239,9 +239,14 @@ void nsFrameMessageManager::AddMessageListener(const nsAString& aMessageName,
|
||||
MessageListener& aListener,
|
||||
bool aListenWhenClosed,
|
||||
ErrorResult& aError) {
|
||||
auto& listeners = mListeners.LookupForAdd(aMessageName).OrInsert([]() {
|
||||
return new nsAutoTObserverArray<nsMessageListenerInfo, 1>();
|
||||
});
|
||||
auto* const listeners =
|
||||
mListeners.WithEntryHandle(aMessageName, [](auto&& entry) {
|
||||
return entry
|
||||
.OrInsertWith([] {
|
||||
return new nsAutoTObserverArray<nsMessageListenerInfo, 1>();
|
||||
})
|
||||
.get();
|
||||
});
|
||||
uint32_t len = listeners->Length();
|
||||
for (uint32_t i = 0; i < len; ++i) {
|
||||
MessageListener* strongListener = listeners->ElementAt(i).mStrongListener;
|
||||
@ -308,9 +313,14 @@ void nsFrameMessageManager::AddWeakMessageListener(
|
||||
}
|
||||
#endif
|
||||
|
||||
auto& listeners = mListeners.LookupForAdd(aMessageName).OrInsert([]() {
|
||||
return new nsAutoTObserverArray<nsMessageListenerInfo, 1>();
|
||||
});
|
||||
auto* const listeners =
|
||||
mListeners.WithEntryHandle(aMessageName, [](auto&& entry) {
|
||||
return entry
|
||||
.OrInsertWith([] {
|
||||
return new nsAutoTObserverArray<nsMessageListenerInfo, 1>();
|
||||
})
|
||||
.get();
|
||||
});
|
||||
uint32_t len = listeners->Length();
|
||||
for (uint32_t i = 0; i < len; ++i) {
|
||||
if (listeners->ElementAt(i).mWeakListener == weak) {
|
||||
|
@ -7151,10 +7151,13 @@ ChromeMessageBroadcaster* nsGlobalWindowInner::GetGroupMessageManager(
|
||||
const nsAString& aGroup) {
|
||||
MOZ_ASSERT(IsChromeWindow());
|
||||
|
||||
RefPtr<ChromeMessageBroadcaster> messageManager =
|
||||
mChromeFields.mGroupMessageManagers.LookupForAdd(aGroup).OrInsert(
|
||||
[this]() { return new ChromeMessageBroadcaster(MessageManager()); });
|
||||
return messageManager;
|
||||
return mChromeFields.mGroupMessageManagers.WithEntryHandle(
|
||||
aGroup, [&](auto&& entry) {
|
||||
return entry
|
||||
.OrInsertWith(
|
||||
[&] { return new ChromeMessageBroadcaster(MessageManager()); })
|
||||
.get();
|
||||
});
|
||||
}
|
||||
|
||||
void nsGlobalWindowInner::InitWasOffline() { mWasOffline = NS_IsOffline(); }
|
||||
|
@ -2859,14 +2859,11 @@ const RawServoSelectorList* nsINode::ParseSelectorList(
|
||||
Document* doc = OwnerDoc();
|
||||
|
||||
Document::SelectorCache& cache = doc->GetSelectorCache();
|
||||
RawServoSelectorList* list =
|
||||
cache.GetList(aSelectorString)
|
||||
.OrInsert([&] {
|
||||
// Note that we want to cache even if null was returned, because we
|
||||
// want to cache the "This is not a valid selector" result.
|
||||
return Servo_SelectorList_Parse(&aSelectorString).Consume();
|
||||
})
|
||||
.get();
|
||||
RawServoSelectorList* list = cache.GetListOrInsertFrom(aSelectorString, [&] {
|
||||
// Note that we want to cache even if null was returned, because we
|
||||
// want to cache the "This is not a valid selector" result.
|
||||
return Servo_SelectorList_Parse(&aSelectorString).Consume();
|
||||
});
|
||||
|
||||
if (!list) {
|
||||
// Invalid selector.
|
||||
|
Loading…
x
Reference in New Issue
Block a user