Bug 1429979 Part 1 - Use LookupForAdd() to avoid explicit new nsAutoPtr.
MozReview-Commit-ID: 2LaQVRhPGPB
--- a/layout/style/ImageLoader.cpp
+++ b/layout/style/ImageLoader.cpp
@@ -52,47 +52,32 @@ ImageLoader::AssociateRequestToFrame(img
if (!observer) {
// The request has already been canceled, so ignore it. This is ok because
// we're not going to get any more notifications from a canceled request.
return;
}
MOZ_ASSERT(observer == this);
- FrameSet* frameSet = nullptr;
- if (mRequestToFrameMap.Get(aRequest, &frameSet)) {
- NS_ASSERTION(frameSet, "This should never be null!");
- }
-
- if (!frameSet) {
- nsAutoPtr<FrameSet> newFrameSet(new FrameSet());
-
- mRequestToFrameMap.Put(aRequest, newFrameSet);
- frameSet = newFrameSet.forget();
+ FrameSet* frameSet =
+ mRequestToFrameMap.LookupForAdd(aRequest).OrInsert([=]() {
+ nsPresContext* presContext = GetPresContext();
+ if (presContext) {
+ nsLayoutUtils::RegisterImageRequestIfAnimated(presContext,
+ aRequest,
+ nullptr);
+ }
+ return new FrameSet();
+ });
- nsPresContext* presContext = GetPresContext();
- if (presContext) {
- nsLayoutUtils::RegisterImageRequestIfAnimated(presContext,
- aRequest,
- nullptr);
- }
- }
-
- RequestSet* requestSet = nullptr;
- if (mFrameToRequestMap.Get(aFrame, &requestSet)) {
- NS_ASSERTION(requestSet, "This should never be null");
- }
-
- if (!requestSet) {
- nsAutoPtr<RequestSet> newRequestSet(new RequestSet());
-
- mFrameToRequestMap.Put(aFrame, newRequestSet);
- requestSet = newRequestSet.forget();
- aFrame->SetHasImageRequest(true);
- }
+ RequestSet* requestSet =
+ mFrameToRequestMap.LookupForAdd(aFrame).OrInsert([=]() {
+ aFrame->SetHasImageRequest(true);
+ return new RequestSet();
+ });
// Add these to the sets, but only if they're not already there.
uint32_t i = frameSet->IndexOfFirstElementGt(aFrame);
if (i == 0 || aFrame != frameSet->ElementAt(i-1)) {
frameSet->InsertElementAt(i, aFrame);
}
i = requestSet->IndexOfFirstElementGt(aRequest);
if (i == 0 || aRequest != requestSet->ElementAt(i-1)) {
@@ -242,18 +227,18 @@ ImageLoader::ClearFrames(nsPresContext*
{
nsCOMPtr<imgIRequest> debugRequest = do_QueryInterface(request);
NS_ASSERTION(debugRequest == request, "This is bad");
}
#endif
if (aPresContext) {
nsLayoutUtils::DeregisterImageRequest(aPresContext,
- request,
- nullptr);
+ request,
+ nullptr);
}
}
mRequestToFrameMap.Clear();
mFrameToRequestMap.Clear();
}
void